/// <summary> /// Places a new response to this request, e.g. to answer it /// </summary> /// <param name="response"></param> public void Respond(Response response) { response.Request = this; response.Communicator = this.Communicator; response.PeerAddress = this.PeerAddress; if (_responseCount == 0 && IsConfirmable) { response.ID = this.ID; } // TODO 枚举不能与null比较 //if (null == response.Type) { if (_responseCount == 0 && IsConfirmable) { // use piggy-backed response response.Type = MessageType.ACK; } else { // use separate response: // Confirmable response to confirmable request, // Non-confirmable response to non-confirmable request response.Type = this.Type; } } if (response.Code != CoAP.Code.Empty) { response.Token = this.Token; response.RequiresToken = this.RequiresToken; // echo block1 option BlockOption block1 = (BlockOption)GetFirstOption(OptionType.Block1); if (null != block1) { // TODO: block1.setM(false); maybe in TransferLayer response.AddOption(block1); } } _responseCount++; Response = response; // Endpoint will call SendResponse(); }