void GraphicLog::logImpl(int32_t tag, int32_t buffer) { uint8_t scratch[2 + 2 + sizeof(int32_t) + sizeof(int64_t)]; size_t pos = 0; scratch[pos++] = EVENT_TYPE_LIST; scratch[pos++] = 2; writeInt32(scratch, pos, buffer); writeInt64(scratch, pos, ns2ms( systemTime( SYSTEM_TIME_MONOTONIC ) )); android_bWriteLog(tag, scratch, sizeof(scratch)); }
void BaseSerializedObj::writeInt64Array(int64_t array[], uint64_t s) { writeUInt64(s); std::cout << "\n\n l: " << s; uint64_t i = 0; while ( i!=s ) { writeInt64(array[i]); i++; } }
/** * Send an MQTT subscribe packet down a socket. * @param topics list of topics * @param qoss list of corresponding QoSs * @param msgid the MQTT message id to use * @param dup boolean - whether to set the MQTT DUP flag * @param socket the open socket to send the data to * @param clientID the string client identifier, only used for tracing * @return the completion code (e.g. TCPSOCKET_COMPLETE) */ int MQTTPacket_send_subscribe(List* topics, List* qoss, uint64_t msgid, int dup, networkHandles* net, const char* clientID) { Header header; char *data, *ptr; int rc = -1; ListElement *elem = NULL, *qosElem = NULL; int datalen; int mqtt_version = get_client_mqtt_version_from_network_handler(net); FUNC_ENTRY; header.bits.type = SUBSCRIBE; header.bits.dup = dup; header.bits.qos = 1; header.bits.retain = 0; //8 -> 64 bit msg id. if the msgid is 2 Byte, datalen will be decresed datalen = 8 + topics->count * 3; // utf length + char qos == 3 while (ListNextElement(topics, &elem)) datalen += strlen((char*)(elem->content)); ptr = data = malloc(datalen); if(mqtt_version == MQTTVERSION_YUNBA_3_1) { writeInt64(&ptr, msgid); }else{ msgid = (int)msgid; writeInt(&ptr, msgid); //make sure the datalen is adjusted datalen -= 6; } elem = NULL; while (ListNextElement(topics, &elem)) { ListNextElement(qoss, &qosElem); writeUTF(&ptr, (char*)(elem->content)); writeChar(&ptr, *(int*)(qosElem->content)); } rc = MQTTPacket_send(net, header, data, datalen, 1); Log(LOG_PROTOCOL, 22, NULL, net->socket, clientID, msgid, rc); if (rc != TCPSOCKET_INTERRUPTED) free(data); FUNC_EXIT_RC(rc); return rc; }
/** * Serializes the supplied publish data into the supplied buffer, ready for sending * @param buf the buffer into which the packet will be serialized * @param buflen the length in bytes of the supplied buffer * @param dup integer - the MQTT dup flag * @param qos integer - the MQTT QoS value * @param retained integer - the MQTT retained flag * @param packetid integer - the MQTT packet identifier * @param topicName MQTTString - the MQTT topic in the publish * @param payload byte buffer - the MQTT publish payload * @param payloadlen integer - the length of the MQTT payload * @return the length of the serialized data. <= 0 indicates error */ int MQTTSerialize_publish(unsigned char* buf, int buflen, unsigned char dup, int qos, unsigned char retained, uint64_t packetid, MQTTString topicName, unsigned char* payload, int payloadlen) { unsigned char *ptr = buf; MQTTHeader header = {0}; int rem_len = 0; int rc = 0; FUNC_ENTRY; if (MQTTPacket_len(rem_len = MQTTSerialize_publishLength(qos, topicName, payloadlen)) > buflen) { rc = MQTTPACKET_BUFFER_TOO_SHORT; goto exit; } header.bits.type = PUBLISH; header.bits.dup = dup; header.bits.qos = qos; header.bits.retain = retained; writeChar(&ptr, header.byte); /* write header */ ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; writeMQTTString(&ptr, topicName); if (qos > 0) writeInt64(&ptr, packetid); memcpy(ptr, payload, payloadlen); ptr += payloadlen; rc = ptr - buf; exit: FUNC_EXIT_RC(rc); return rc; }
/** * Send an MQTT unsubscribe packet down a socket. * @param topics list of topics * @param msgid the MQTT message id to use * @param dup boolean - whether to set the MQTT DUP flag * @param socket the open socket to send the data to * @param clientID the string client identifier, only used for tracing * @return the completion code (e.g. TCPSOCKET_COMPLETE) */ int MQTTPacket_send_unsubscribe(List* topics, uint64_t msgid, int dup, networkHandles* net, const char* clientID) { Header header; char *data, *ptr; int rc = -1; ListElement *elem = NULL; int datalen; int mqtt_version = get_client_mqtt_version_from_network_handler(net); FUNC_ENTRY; header.bits.type = UNSUBSCRIBE; header.bits.dup = dup; header.bits.qos = 1; header.bits.retain = 0; datalen = 8 + topics->count * 2; // utf length == 2 while (ListNextElement(topics, &elem)) datalen += strlen((char*)(elem->content)); ptr = data = malloc(datalen); if(MQTTVERSION_YUNBA_3_1 == mqtt_version) { writeInt64(&ptr, msgid); }else{ writeInt(&ptr, msgid); datalen -= 6; } elem = NULL; while (ListNextElement(topics, &elem)) writeUTF(&ptr, (char*)(elem->content)); rc = MQTTPacket_send(net, header, data, datalen, 1); Log(LOG_PROTOCOL, 25, NULL, net->socket, clientID, msgid, rc); if (rc != TCPSOCKET_INTERRUPTED) free(data); FUNC_EXIT_RC(rc); return rc; }
/** * Serializes the supplied subscribe data into the supplied buffer, ready for sending * @param buf the buffer into which the packet will be serialized * @param buflen the length in bytes of the supplied bufferr * @param dup integer - the MQTT dup flag * @param packetid integer - the MQTT packet identifier * @param count - number of members in the topicFilters and reqQos arrays * @param topicFilters - array of topic filter names * @param requestedQoSs - array of requested QoS * @return the length of the serialized data. <= 0 indicates error */ int MQTTSerialize_subscribe(unsigned char* buf, int buflen, unsigned char dup, uint64_t packetid, int count, MQTTString topicFilters[], int requestedQoSs[]) { unsigned char *ptr = buf; MQTTHeader header = {0}; int rem_len = 0; int rc = 0; int i = 0; FUNC_ENTRY; if (MQTTPacket_len(rem_len = MQTTSerialize_subscribeLength(count, topicFilters)) > buflen) { rc = MQTTPACKET_BUFFER_TOO_SHORT; goto exit; } header.byte = 0; header.bits.type = SUBSCRIBE; header.bits.dup = dup; header.bits.qos = 1; writeChar(&ptr, header.byte); /* write header */ ptr += MQTTPacket_encode(ptr, rem_len); /* write remaining length */; writeInt64(&ptr, packetid); for (i = 0; i < count; ++i) { writeMQTTString(&ptr, topicFilters[i]); writeChar(&ptr, requestedQoSs[i]); } rc = ptr - buf; exit: FUNC_EXIT_RC(rc); return rc; }
/** * Serializes the ack packet into the supplied buffer. * @param buf the buffer into which the packet will be serialized * @param buflen the length in bytes of the supplied buffer * @param type the MQTT packet type * @param dup the MQTT dup flag * @param packetid the MQTT packet identifier * @return serialized length, or error if 0 */ int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char packettype, unsigned char dup, uint64_t packetid) { MQTTHeader header = {0}; int rc = 0; unsigned char *ptr = buf; FUNC_ENTRY; if (buflen < 4) { rc = MQTTPACKET_BUFFER_TOO_SHORT; goto exit; } header.bits.type = packettype; header.bits.dup = dup; header.bits.qos = (packettype == PUBREL) ? 1 : 0; writeChar(&ptr, header.byte); /* write header */ ptr += MQTTPacket_encode(ptr, 8); /* write remaining length */ writeInt64(&ptr, packetid); rc = ptr - buf; exit: FUNC_EXIT_RC(rc); return rc; }
void OutputStream::writeDouble (double value) { union { int64 asInt; double asDouble; } n; n.asDouble = value; writeInt64 (n.asInt); }
BEAST_API bool OutputStream::writeType <uint64> (uint64 v) { return writeInt64 (static_cast <int64> (v)); }
BEAST_API bool OutputStream::writeType <int64> (int64 v) { return writeInt64 (v); }
void CNetWriter::writeInt64(const char* szKey, CInt64& obj) { writeInt64(szKey, obj.getValue()); }