staticboolsendPayload(SSL*sslPtr,char*deviceTokenBinary,char*payloadBuff,size_tpayloadLength){boolrtn=false;if(sslPtr&&deviceTokenBinary&&payloadBuff&&payloadLength){uint8_tcommand=1;/* command number */charbinaryMessageBuff[sizeof(uint8_t)+sizeof(uint32_t)+sizeof(uint32_t)+sizeof(uint16_t)+DEVICE_BINARY_SIZE+sizeof(uint16_t)+MAXPAYLOAD_SIZE];/* message format is, |COMMAND|ID|EXPIRY|TOKENLEN|TOKEN|PAYLOADLEN|PAYLOAD| */char*binaryMessagePt=binaryMessageBuff;uint32_twhicheverOrderIWantToGetBackInAErrorResponse_ID=1234;uint32_tnetworkOrderExpiryEpochUTC=htonl(time(NULL)+86400);// expire message if not delivered in 1 dayuint16_tnetworkOrderTokenLength=htons(DEVICE_BINARY_SIZE);uint16_tnetworkOrderPayloadLength=htons(payloadLength);/* command */*binaryMessagePt++=command;/* provider preference ordered ID */memcpy(binaryMessagePt,&whicheverOrderIWantToGetBackInAErrorResponse_ID,sizeof(uint32_t));binaryMessagePt+=sizeof(uint32_t);/* expiry date network order */memcpy(binaryMessagePt,&networkOrderExpiryEpochUTC,sizeof(uint32_t));binaryMessagePt+=sizeof(uint32_t);/* token length network order */memcpy(binaryMessagePt,&networkOrderTokenLength,sizeof(uint16_t));binaryMessagePt+=sizeof(uint16_t);/* device token */memcpy(binaryMessagePt,deviceTokenBinary,DEVICE_BINARY_SIZE);binaryMessagePt+=DEVICE_BINARY_SIZE;/* payload length network order */memcpy(binaryMessagePt,&networkOrderPayloadLength,sizeof(uint16_t));binaryMessagePt+=sizeof(uint16_t);/* payload */memcpy(binaryMessagePt,payloadBuff,payloadLength);binaryMessagePt+=payloadLength;if(SSL_write(sslPtr,binaryMessageBuff,(binaryMessagePt-binaryMessageBuff))>0)rtn=true;}returnrtn;}