/**@ingroup tipsec_xp_group */ int tipsec_set_keys(tipsec_context_t* ctx, const tipsec_key_t* ik, const tipsec_key_t* ck) { if(!ctx || !ik || !ck){ return -1; } TSK_FREE(ctx->ik); TSK_FREE(ctx->ck); ctx->ik = tsk_strndup(ik, TIPSEC_KEY_LEN); ctx->ck = tsk_strndup(ck, TIPSEC_KEY_LEN); /* XP version of IPSec do not support encryption key but we copy ck (Who know?). */ return 0; }
char* tsdp_header_tostring(const tsdp_header_t *self) { tsk_buffer_t* output = tsk_buffer_create_null(); char* str = tsk_null; if(!(tsdp_header_serialize(self, output))) { str = tsk_strndup(TSK_BUFFER_DATA(output), TSK_BUFFER_SIZE(output)); } TSK_OBJECT_SAFE_FREE(output); return str; }
char* tmsrp_header_tostring(const tmsrp_header_t *self) { char* ret = tsk_null; tsk_buffer_t* buffer; if(self && self->tostring){ if((buffer = tsk_buffer_create_null())){ self->tostring(self, buffer); ret = tsk_strndup(buffer->data, buffer->size); TSK_OBJECT_SAFE_FREE(buffer); } } return ret; }
//================================================================================================= // [[RFC 5389 - 15.3. USERNAME]] object definition // static tsk_object_t* tnet_stun_attribute_username_ctor(tsk_object_t * self, va_list * app) { tnet_stun_attribute_username_t *attribute = self; if(attribute){ const void *payload = va_arg(*app, const void*); tsk_size_t payload_size = va_arg(*app, tsk_size_t); attribute->value = tsk_strndup(payload, payload_size); TNET_STUN_ATTRIBUTE(attribute)->type = stun_username; TNET_STUN_ATTRIBUTE(attribute)->length = payload_size; } return self; }
/** Deserialize <character-string>. */ int tnet_dns_rr_charstring_deserialize(const void* data, char** charstring, tsk_size_t *offset) { /* RFC 1035 - 3.3. Standard RRs <character-string> is a single length octet followed by that number of characters. <character-string> is treated as binary information, and can be up to 256 characters in length (including the length octet). */ uint8_t* dataPtr = (((uint8_t*)data)+ *offset); uint8_t length = *dataPtr; *charstring = tsk_strndup((const char*)(dataPtr + 1), length); *offset += (1 + length); return 0; }
//================================================================================================= // [[RFC 5389 - 15.6. ERROR-CODE]] object definition // static tsk_object_t* tnet_stun_attribute_errorcode_ctor(tsk_object_t * self, va_list * app) { tnet_stun_attribute_errorcode_t *attribute = self; if(attribute){ const uint8_t *payload = (const uint8_t*)va_arg(*app, const void*); tsk_size_t payload_size = va_arg(*app, tsk_size_t); if(payload_size >4){ uint32_t code = tnet_htonl_2(payload); payload += 4; attribute->_class = code >>8; attribute->number = (code & 0xFF); attribute->reason_phrase = tsk_strndup((const char*)payload, (payload_size-4)); } TNET_STUN_ATTRIBUTE(attribute)->type = stun_error_code; TNET_STUN_ATTRIBUTE(attribute)->length = payload_size; }