/*! * Decodes an Encoded-string-value from the protocol data * Encoded-string-value = Text-string | Value-length Char-set Text-string * * \param tvb The buffer with PDU-data * \param offset Offset within that buffer * \param strval Pointer to variable into which to put pointer to * buffer allocated to hold the text; must be freed * when no longer used * * \return The length in bytes of the entire field */ static guint get_encoded_strval(tvbuff_t *tvb, guint offset, const char **strval) { guint field; guint length; guint count; field = tvb_get_guint8(tvb, offset); if (field < 32) { length = get_value_length(tvb, offset, &count); if (length < 2) { *strval = ""; } else { /* \todo Something with "Char-set", skip for now */ *strval = (char *)tvb_get_string(wmem_packet_scope(), tvb, offset + count + 1, length - 1); } return count + length; } else return get_text_string(tvb, offset, strval); }
char* winapi_read_var(int scope, char* name) { HKEY hKey; int lRet = open_variables_key(scope, &hKey); DWORD buffer_size = get_value_length(hKey, name)+1; char* value_buf = malloc(buffer_size); value_buf[0]=0; // null terminate in case query // doesn't return anything RegQueryValueEx(hKey, name, 0, NULL, value_buf, &buffer_size); RegCloseKey(hKey); return value_buf; };
static void decode_ie(nsip_ie_t *ie, build_info_t *bi) { int org_offset = bi->offset; if (tvb_length_remaining(bi->tvb, bi->offset) < 1) { return; } switch (ie->format) { case NSIP_IE_FORMAT_TLV: if (!check_correct_iei(ie, bi)) { return; } bi->offset++; /* Account for type */ ie->total_length = 1; get_value_length(ie, bi); break; case NSIP_IE_FORMAT_TV: if (!check_correct_iei(ie, bi)) { return; } bi->offset++; /* Account for type */ ie->value_length = ie->total_length - 1; break; case NSIP_IE_FORMAT_V: ie->value_length = ie->total_length; default: ; } switch (ie->iei) { case NSIP_IE_CAUSE: decode_iei_cause(ie, bi, org_offset); break; case NSIP_IE_NS_VCI: decode_iei_ns_vci(ie, bi, org_offset); break; case NSIP_IE_NS_PDU: decode_iei_ns_pdu(ie, bi, org_offset); break; case NSIP_IE_NSEI: decode_iei_nsei(ie, bi, org_offset); break; case NSIP_IE_BVCI: decode_iei_bvci(ie, bi, org_offset); break; case NSIP_IE_IP4_ELEMENTS: decode_ip_elements(&ipv4_element, ie, bi, org_offset); break; case NSIP_IE_IP6_ELEMENTS: decode_ip_elements(&ipv6_element, ie, bi, org_offset); break; case NSIP_IE_MAX_NUM_NS_VC: decode_iei_max_num_ns_vc(ie, bi, org_offset); break; case NSIP_IE_NUM_IP4_ENDPOINTS: decode_iei_num_ip4_endpoints(ie, bi, org_offset); break; case NSIP_IE_NUM_IP6_ENDPOINTS: decode_iei_num_ip6_endpoints(ie, bi, org_offset); break; case NSIP_IE_RESET_FLAG: decode_iei_reset_flag(ie, bi, org_offset); break; case NSIP_IE_IP_ADDRESS: decode_iei_ip_address(ie, bi, org_offset); break; default: ; } }