示例#1
0
文件: dns.c 项目: jintwo/sns
char *pack_record(dns_record_t *record, size_t *rlen)
{
    size_t record_len = sizeof(dns_record_t);
    char *buf = malloc(record_len);
    char *start = buf;

    if (record->use_compression) {
        memcpy(buf, record->cptr, 2);
        buf += 2;
    } else {
        size_t domain_rec_len;
        char *domain = pack_label(record->label, &domain_rec_len);
        memcpy(buf, domain, domain_rec_len);
        buf += domain_rec_len;
    }

    buf = write_uint16(buf, &record->rtype, true);
    buf = write_uint16(buf, &record->rclass, true);
    buf = write_uint32(buf, &record->ttl, true);
    buf = write_uint16(buf, &record->rdlength, true);
    memcpy(buf, record->rdata, record->rdlength);
    buf += record->rdlength;

    *rlen = buf - start;

#ifdef DEBUG
    puts("output record");
    dump_buffer(start, *rlen);
#endif

    return start;
}
示例#2
0
void 
Squeezer_file_header_t::write_to_file(FILE * out) const
{
    write_uint8(out, file_type_mark[0]);
    write_uint8(out, file_type_mark[1]);
    write_uint8(out, file_type_mark[2]);
    write_uint8(out, file_type_mark[3]);

    write_double(out, floating_point_check);

    write_uint16(out, date_year);
    write_uint8(out, date_month);
    write_uint8(out, date_day);

    write_uint8(out, time_hour);
    write_uint8(out, time_minute);
    write_uint8(out, time_second);

    write_uint8(out, radiometer.horn);
    write_uint8(out, radiometer.arm);
    write_uint16(out, od);
    write_double(out, first_obt);
    write_double(out, last_obt);
    write_double(out, first_scet_in_ms);
    write_double(out, last_scet_in_ms);
    write_uint32(out, number_of_chunks);
}
static int msp_send_packet(struct msp_sock *sock, struct msp_packet *packet)
{
  assert(sock->header.remote.port);
  if (daemon_addr.addrlen == 0){
    if (make_local_sockaddr(&daemon_addr, "mdp.2.socket") == -1)
      return -1;
  }
  
  uint8_t msp_header[5];

  msp_header[0]=packet->flags;
  
  // only set the ack flag if we've received a sequenced packet
  if (sock->state & MSP_STATE_RECEIVED_DATA)
    msp_header[0]|=FLAG_ACK;
  
  write_uint16(&msp_header[1], sock->rx.next_seq);
  write_uint16(&msp_header[3], packet->seq);
  sock->previous_ack = sock->rx.next_seq;
  
  struct fragmented_data data={
    .fragment_count=3,
    .iov={
      {
	.iov_base = (void*)&sock->header,
	.iov_len = sizeof(struct mdp_header)
      },
      {
	.iov_base = &msp_header,
	.iov_len = sizeof(msp_header)
      },
      {
	.iov_base = (void*)packet->payload,
示例#4
0
static bool generate_output()
{
    size_t n;
    uint16_t C, A;

    /* Write header */
    write_data(MAGIC_STR, MAGIC_LEN);

    /* Generate instructions */
    C = A = 0;
    for (n = 0; n < last_num_blocks; ++n)
    {
        if (last_blocks[n].is == NULL)
        {
            /* Check to see if we must start a new instruction */
            if ( (C > 0 && last_blocks[n].offset !=
                           last_blocks[n - 1].offset + BS ) ||
                 (C == 0x7fffu) || (A > 0) )
            {
                emit_instruction(n, C, A);
                C = A = 0;
            }
            ++C;
        }
        else
        {
            if (A == 0x7fffu)
            {
                emit_instruction(n, C, A);
                C = A = 0;
            }
            ++A;
        }
    }

    /* Emit final instruction (if necessary) */
    if (C > 0 || A > 0) emit_instruction(last_num_blocks, C, A);

    /* Write end-of-instructions */
    write_uint32(0xffffffffu);
    write_uint16(0xffffu);
    write_uint16(0xffffu);

    /* Add last file digest */
    write_data(last_digest, DS);

    /* Add first file digest (if known) */
    if (!orig_digest_known)
    {
        fprintf(stderr, "WARNING: original file digest unknown; "
                        "generating version 1.0 differences file.\n");
    }
    else
    {
        write_data(orig_digest, DS);
    }

    return true;
}
示例#5
0
static uint8_t* write_data_item(uint8_t* msg, uint16_t type, uint16_t length)
{
	/* Octet 0 and 1 are the type code */
	uint8_t* p = write_uint16(type,msg);

	/* Octet 2 and 3 are the length, this excludes the header length (4) */
	return write_uint16(length,p);
}
示例#6
0
static uint8_t* write_message_header(uint8_t* msg, uint16_t msg_type)
{
	/* Octet 0 and 1 are the message type */
	uint8_t* p = write_uint16(msg_type,msg);

	/* Octet 2 and 3 are the message length, set to 0 initially */
	return write_uint16(0,p);
}
示例#7
0
int opus_header_to_packet(const OpusHeader *h, unsigned char *packet, int len)
{
   int i;
   Packet p;
   unsigned char ch;

   p.data = packet;
   p.maxlen = len;
   p.pos = 0;
   if (len<19)return 0;
   if (!write_chars(&p, (const unsigned char*)"OpusHead", 8))
      return 0;
   /* Version is 1 */
   ch = 1;
   if (!write_chars(&p, &ch, 1))
      return 0;

   ch = h->channels;
   if (!write_chars(&p, &ch, 1))
      return 0;

   if (!write_uint16(&p, h->preskip))
      return 0;

   if (!write_uint32(&p, h->input_sample_rate))
      return 0;

   if (!write_uint16(&p, h->gain))
      return 0;

   ch = h->channel_mapping;
   if (!write_chars(&p, &ch, 1))
      return 0;

   if (h->channel_mapping != 0)
   {
      ch = h->nb_streams;
      if (!write_chars(&p, &ch, 1))
         return 0;

      ch = h->nb_coupled;
      if (!write_chars(&p, &ch, 1))
         return 0;

      /* Multi-stream support */
      for (i=0;i<h->channels;i++)
      {
         if (!write_chars(&p, &h->stream_map[i], 1))
            return 0;
      }
   }

   return p.pos;
}
示例#8
0
static int
write_header_v1(struct save_data *save_data,
                struct ipset_node_cache *cache, ipset_node_id root)
{
    /* Output the magic number for an IP set, and the file format
     * version that we're going to write. */
    rii_check(cork_stream_consumer_data(save_data->stream, NULL, 0, true));
    rii_check(write_string(save_data->stream, MAGIC_NUMBER));
    rii_check(write_uint16(save_data->stream, 0x0001));

    /* Determine how many reachable nodes there are, to calculate the
     * size of the set. */
    size_t  nonterminal_count = ipset_node_reachable_count(cache, root);
    size_t  set_size =
        MAGIC_NUMBER_LENGTH +    /* magic number */
        sizeof(uint16_t) +        /* version number  */
        sizeof(uint64_t) +        /* length of set */
        sizeof(uint32_t) +        /* number of nonterminals */
        (nonterminal_count *     /* for each nonterminal: */
         (sizeof(uint8_t) +       /*   variable number */
          sizeof(uint32_t) +      /*   low pointer */
          sizeof(uint32_t)        /*   high pointer */
         ));

    /* If the root is a terminal, we need to add 4 bytes to the set
     * size, for storing the terminal value. */
    if (ipset_node_get_type(root) == IPSET_TERMINAL_NODE) {
        set_size += sizeof(uint32_t);
    }

    rii_check(write_uint64(save_data->stream, set_size));
    rii_check(write_uint32(save_data->stream, nonterminal_count));
    return 0;
}
示例#9
0
static void send_destination_down_resp(int s, const uint8_t* mac, enum dlep_status_code sc)
{
	uint8_t msg[30];
	uint16_t msg_len = 0;

	/* Write the message header */
	uint8_t* p = write_message_header(msg,DLEP_DEST_DOWN_RESP);

	/* Write out our MAC Address */
	p = write_data_item(p,DLEP_MAC_ADDRESS_DATA_ITEM,6);
	memcpy(p,mac,6);
	p += 6;

	/* Write out our Status code */
	p = write_status_code(p,sc);

	msg_len = p - msg;

	/* Octet 2 and 3 are the message length, minus the length of the header */
	write_uint16(msg_len - 4,msg + 2);

	printf("Sending Destination Down Response message\n");

	if (send(s,msg,msg_len,0) != msg_len)
		printf("Failed to send Destination Down Response message: %s\n",strerror(errno));
}
示例#10
0
文件: dump.c 项目: JaimeSodre/julia
static void jl_serialize_fptr(ios_t *s, void *fptr)
{
    void **pbp = ptrhash_bp(&fptr_to_id, fptr);
    if (*pbp == HT_NOTFOUND)
        jl_error("unknown function pointer");
    write_uint16(s, *(ptrint_t*)pbp);
}
static void test_compress(
    FILE* outFp,
    FILE* inpFp,
    size_t messageMaxBytes,
    size_t ringBufferBytes)
{
    LZ4_stream_t* const lz4Stream = LZ4_createStream();
    const size_t cmpBufBytes = LZ4_COMPRESSBOUND(messageMaxBytes);
    char* const cmpBuf = (char*) malloc(cmpBufBytes);
    char* const inpBuf = (char*) malloc(ringBufferBytes);
    int inpOffset = 0;

    for ( ; ; )
    {
        char* const inpPtr = &inpBuf[inpOffset];

#if 0
        // Read random length data to the ring buffer.
        const int randomLength = (rand() % messageMaxBytes) + 1;
        const int inpBytes = (int) read_bin(inpFp, inpPtr, randomLength);
        if (0 == inpBytes) break;
#else
        // Read line to the ring buffer.
        int inpBytes = 0;
        if (!fgets(inpPtr, (int) messageMaxBytes, inpFp))
            break;
        inpBytes = (int) strlen(inpPtr);
#endif

        {
            const int cmpBytes = LZ4_compress_fast_continue(
                lz4Stream, inpPtr, cmpBuf, inpBytes, cmpBufBytes, 1);
            if (cmpBytes <= 0) break;
            write_uint16(outFp, (uint16_t) cmpBytes);
            write_bin(outFp, cmpBuf, cmpBytes);

            // Add and wraparound the ringbuffer offset
            inpOffset += inpBytes;
            if ((size_t)inpOffset >= ringBufferBytes - messageMaxBytes) inpOffset = 0;
        }
    }
    write_uint16(outFp, 0);

    free(inpBuf);
    free(cmpBuf);
    LZ4_freeStream(lz4Stream);
}
示例#12
0
//---------------------------------------------------------------------------------------------
void BitMessage::write_netaddr(const os::NetAddress addr)
{
	uint8_t* ptr;
	
	ptr = get_byte_space(4);
	memcpy(ptr, addr.m_address, 4);
	write_uint16(addr.port());
}
示例#13
0
文件: fifo.c 项目: ahirOrg/ahir
void write_uint16_n(const char *id, uint16_t* buf, int buf_len)
{
  int i;
  for(i = 0; i < buf_len; i++)
    {
      write_uint16((char*) id,buf[i]);
    }
}
示例#14
0
void *spice_marshaller_add_uint16(SpiceMarshaller *m, uint16_t v)
{
    uint8_t *ptr;

    ptr = spice_marshaller_reserve_space(m, sizeof(uint16_t));
    write_uint16(ptr, v);
    return (void *)ptr;
}
示例#15
0
文件: dns.c 项目: jintwo/sns
char *pack_question(dns_question_t *question, size_t *len)
{
    size_t question_len = sizeof(dns_question_t);
    char *buf = malloc(question_len);
    char *start = buf;

    size_t domain_rec_len;
    char *domain = pack_label(question->label, &domain_rec_len);
    memcpy(buf, domain, domain_rec_len);
    buf += domain_rec_len;

    buf = write_uint16(buf, &question->qtype, true);
    buf = write_uint16(buf, &question->qclass, true);

    *len = buf - start;

    return start;
}
示例#16
0
void gain_menu_branch(uint8_t com_type){
	
	switch(com_type){
		case DISPLAY:
			uart0_printf("P: %f, I: %f, D: %f\r\n", c_gain->p_gain, c_gain->i_gain, c_gain->d_gain);
			break;
		
		case SET_P:
			uart0_printf("P Gain is %f, input new value.\r\n", c_gain->p_gain);
			c_gain->p_gain = uart0_get_float_input();
			break;
		
		case SET_I:
			uart0_printf("I Gain is %f, input new value.\r\n", c_gain->i_gain);
			c_gain->i_gain = uart0_get_float_input();
			break;
		
		case SET_D:
			uart0_printf("D Gain is %f, input new value.\r\n", c_gain->d_gain);
			c_gain->d_gain = uart0_get_float_input();
			break;
		
		case SET_Q_TH:
			uart0_printf("OF quality threshold is %d, input new value. (range: 0~255)\r\n", c_flow->qual_th);
			c_flow->qual_th = (uint16_t)uart0_get_float_input();
			if(c_flow->qual_th > 255) c_flow->qual_th = 255;
			break;
		
		case SAVE:
			write_float(P_ADD, c_gain->p_gain);
			write_float(I_ADD, c_gain->i_gain);
			write_float(D_ADD, c_gain->d_gain);
			write_uint16(Q_TH_ADD, c_flow->qual_th);
			uart0_printf("Saved!\r\n");
			break;
		
		case RESTORE:
			c_gain->p_gain = read_float(P_ADD);
			c_gain->i_gain = read_float(I_ADD);
			c_gain->d_gain = read_float(D_ADD);
			uart0_printf("Restore Parameters.\r\n");
			break;
		
		case EXIT:
			menu_flg = 0;
			input_detect = 0;
			top_menu();
			break;
		
		default:
			uart0_printf("invalid command\r\n");
			input_detect = 0;
			break;
	}
}
示例#17
0
int main(int argc, char* argv[])
{
        FILE* ofile1;
        FILE* ofile2;
        char ostr[17];
	uint16_t N[ORDER];

#ifdef SW
	init_pipe_handler();
	PTHREAD_DECL(gcd_daemon);
	PTHREAD_CREATE(gcd_daemon);
#endif

        ofile1 = fopen("gcd_inputs.txt","w");
        ofile2 = fopen("gcd_result.txt","w");

	int err = 0;
   
	uint16_t S = 1;
	if(argc > 1)
		S = atoi(argv[1]);
	fprintf(stderr,"Scale-factor = %d.\n",S);


	srand48(19);

	uint16_t i;
	for(i = 0; i < ORDER; i++)
	{
		N[i] = ((uint16_t) (0x0fff * drand48())) * S;
		fprintf(stderr,"N[%d] = %d\n", i, N[i]);
		write_uint16("in_data",N[i]);
		to_string(ostr,N[i]);
		fprintf(ofile1,"%s\n", ostr);
	}

	uint16_t g = read_uint16("out_data");
	fprintf(stderr,"GCD = %d.\n",g);
	to_string(ostr,g);
	fprintf(ofile2,"%s\n",ostr);

	uint32_t et = read_uint32("elapsed_time");
	fprintf(stderr,"Elapsed time = %u.\n", et);

	fclose(ofile1);
	fclose(ofile2);

#ifdef SW
	PTHREAD_CANCEL(gcd_daemon);
	close_pipe_handler();
#endif

	return(0);
}
示例#18
0
文件: format.c 项目: renatomaia/TIER
static int writer_uint16(lua_State* L)
{
	writer_t* writer 	= lua_touserdata(L, 1);
	lua_Integer integer = luaL_checkinteger(L, 2);
	
	if(integer < 0 || integer > UINT16_MAX)
		luaL_error(L, "unsigned overflow");
	
	write_uint16(writer, (uint16_t)integer);
	return 0;
}
示例#19
0
static void do_llen(const char* line, uint8_t len)
{
  if (len) goto on_error;

  write_ok();
  write_uint16(LINE_MAX_SIZE);
  return ;

 on_error:
  write_ko();
  return ;
}
int key_value_write_lines(FILE *f, struct key_value_specification *kvs, void *base_address[])
{
	struct key_value_specification *k;
	int rc;
	int errs = 0;

	for (k = kvs; k->key; k++) {
		switch (k->type) {
		case KVS_STRING:
			rc = write_string(f, k, base_address);
			break;
		case KVS_INT64:
			rc = write_int64(f, k, base_address);
			break;
		case KVS_INT32:
			rc = write_int32(f, k, base_address);
			break;
		case KVS_INT16:
			rc = write_int16(f, k, base_address);
			break;
		case KVS_INT8:
			rc = write_int8(f, k, base_address);
			break;
		case KVS_UINT64:
			rc = write_uint64(f, k, base_address);
			break;
		case KVS_UINT32:
			rc = write_uint32(f, k, base_address);
			break;
		case KVS_UINT16:
			rc = write_uint16(f, k, base_address);
			break;
		case KVS_UINT8:
			rc = write_uint8(f, k, base_address);
			break;
		case KVS_DOUBLE:
			rc = write_double(f, k, base_address);
			break;
		case KVS_FLOAT:
			rc = write_float(f, k, base_address);
			break;
		default:
			fprintf(stderr, "%s:%d: unknown key type '%c' for key '%s'\n",
				__func__, __LINE__, k->type, k->key);
			rc = -1;
			break;
		}
		if (rc)
			errs++;
	}
	return errs;
}
示例#21
0
/* Emits an instruction to generate the last (C+A) blocks before position n. */
static void emit_instruction(size_t n, uint16_t C, uint16_t A)
{
    uint8_t block[BS];
    size_t a;
    InputStream *is;

    assert(C + A <= n && n <= last_num_blocks);

    /* Write instruction */
    write_uint32((C == 0) ? 0xffffffffu : last_blocks[n - A - C].offset/BS);
    write_uint16(C);
    write_uint16(A);

    /* Add instruction data */
    for (a = 0; a < A; ++a)
    {
        is = last_blocks[n - A + a].is;
        is->seek(is, last_blocks[n - A + a].offset);
        read_data(is, block, BS);
        write_data(block, BS);
    }
}
示例#22
0
void _stlink_usb_write_mem8(stlink_t *sl, uint32_t addr, uint16_t len) {
    struct stlink_libusb * const slu = sl->backend_data;
    unsigned char* const data = sl->q_buf;
    unsigned char* const cmd  = sl->c_buf;

    int i = fill_command(sl, SG_DXFER_TO_DEV, 0);
    cmd[i++] = STLINK_DEBUG_COMMAND;
    cmd[i++] = STLINK_DEBUG_WRITEMEM_8BIT;
    write_uint32(&cmd[i], addr);
    write_uint16(&cmd[i + 4], len);
    send_only(slu, 0, cmd, slu->cmd_len);
    send_only(slu, 1, data, len);
}
示例#23
0
文件: dump.c 项目: JaimeSodre/julia
static void jl_serialize_tag_type(ios_t *s, jl_value_t *v)
{
    if (jl_is_struct_type(v)) {
        writetag(s, (jl_value_t*)jl_struct_kind);
        jl_serialize_value(s, jl_struct_kind);
        write_uint16(s, jl_tuple_len(((jl_struct_type_t*)v)->names));
        write_int32(s, ((jl_struct_type_t*)v)->uid);
        write_int32(s, ((jl_struct_type_t*)v)->size);
        write_int32(s, ((jl_struct_type_t*)v)->alignment);
        size_t nf = jl_tuple_len(((jl_struct_type_t*)v)->names);
        ios_write(s, (char*)&((jl_struct_type_t*)v)->fields[0], nf*sizeof(jl_fielddesc_t));
        jl_serialize_value(s, ((jl_struct_type_t*)v)->name);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->parameters);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->super);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->names);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->types);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->ctor_factory);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->env);
        jl_serialize_value(s, ((jl_struct_type_t*)v)->linfo);
        jl_serialize_fptr(s, ((jl_struct_type_t*)v)->fptr);
    }
    else if (jl_is_bits_type(v)) {
        writetag(s, jl_struct_kind);
        jl_serialize_value(s, jl_bits_kind);
        if (v == (jl_value_t*)jl_int32_type)
            write_uint8(s, 2);
        else if (v == (jl_value_t*)jl_bool_type)
            write_uint8(s, 3);
        else if (v == (jl_value_t*)jl_int64_type)
            write_uint8(s, 4);
        else
            write_uint8(s, 0);
        jl_serialize_value(s, ((jl_tag_type_t*)v)->name);
        jl_serialize_value(s, ((jl_bits_type_t*)v)->parameters);
        write_int32(s, ((jl_bits_type_t*)v)->nbits);
        jl_serialize_value(s, ((jl_bits_type_t*)v)->super);
        write_int32(s, ((jl_bits_type_t*)v)->uid);
    }
    else {
        assert(jl_is_tag_type(v));
        writetag(s, jl_tag_kind);
        jl_serialize_value(s, ((jl_tag_type_t*)v)->name);
        jl_serialize_value(s, ((jl_tag_type_t*)v)->parameters);
        jl_serialize_value(s, ((jl_tag_type_t*)v)->super);
    }
}
示例#24
0
int test_enc () {
  char buf[1024];
  char *buf_ptr = (char *) &buf;
  char *res_enc = NULL;
  char *res_dec = NULL;

  uint8_t v8;
  res_enc = write_uint8(buf_ptr, 42);
  res_dec = read_uint8(buf_ptr, &v8);
  assert(buf_ptr - res_dec == buf_ptr - res_enc);
  assert(v8 == 42);

  uint16_t v16;
  res_enc = write_uint16(buf_ptr, 4200);
  res_dec = read_uint16(buf_ptr, &v16);
  assert(buf_ptr - res_dec == buf_ptr - res_enc);
  assert(v16 == 4200);

  uint32_t v32;
  res_enc = write_uint32(buf_ptr, 420000);
  res_dec = read_uint32(buf_ptr, &v32);
  assert(buf_ptr - res_dec == buf_ptr - res_enc);
  assert(v32 == 420000);

  int32_t i32;
  res_enc = write_int32(buf_ptr, -420000);
  res_dec = read_int32(buf_ptr, &i32);
  assert(buf_ptr - res_dec == buf_ptr - res_enc);
  assert(i32 == -420000);

  char* str = "hello world";
  uint16_t str_len;
  res_enc = write_string(buf_ptr, str, strlen(str));
  res_dec = read_string(buf_ptr, &str, &str_len);
  assert(buf_ptr - res_dec == buf_ptr - res_enc);
  assert(!strcmp(str, "hello world"));
  assert(strlen(str) == str_len);

  char *tmp = "1234512345";
  res_enc = write_buffer(buf_ptr, tmp, 10);
  assert(res_enc - buf_ptr == 10);
  for (int i = 0; i < 10; i++) assert(*(buf + i) == *(tmp + i));

  return 0;
}
示例#25
0
static void send_heartbeat(int s, uint16_t router_heartbeat_interval)
{
	uint8_t msg[30];
	uint16_t msg_len = 0;

	/* Write the message header */
	uint8_t* p = write_message_header(msg,DLEP_PEER_HEARTBEAT);

	msg_len = p - msg;

	/* Octet 2 and 3 are the message length, minus the length of the header */
	write_uint16(msg_len - 4,msg + 2);

	printf("Sending Heartbeat message\n");

	if (send(s,msg,msg_len,0) != msg_len)
		printf("Failed to send Heartbeat message: %s\n",strerror(errno));
}
示例#26
0
static int send_session_init_message(int s, uint32_t router_heartbeat_interval)
{
	uint8_t msg[300];
	uint16_t msg_len = 0;
	size_t peer_type_len = 0;
	uint8_t flags = 0x00;

	/* Write the message header */
	uint8_t* p = write_message_header(msg,DLEP_SESSION_INIT);

	/* Write out our Heartbeat Interval */
	p = write_data_item(p,DLEP_HEARTBEAT_INTERVAL_DATA_ITEM,4);
	p = write_uint32(router_heartbeat_interval,p);

	/* Write out Peer Type */
	peer_type_len = strlen(PEER_TYPE);
	if (peer_type_len > sizeof(msg) - 17)
		peer_type_len = sizeof(msg) - 17;

	p = write_data_item(p,DLEP_PEER_TYPE_DATA_ITEM, 1 + peer_type_len);  /* includes length of the flag + description fields */
	*p++ = flags;

	if (peer_type_len)
	{
		memcpy(p, PEER_TYPE, peer_type_len);
		p += peer_type_len;
	}

	msg_len = p - msg;

	/* Octet 2 and 3 are the message length, minus the length of the header */
	write_uint16(msg_len - 4,msg + 2);

	printf("Sending Session Initialization message\n");

	if (send(s,msg,msg_len,0) != msg_len)
	{
		printf("Failed to send Session Initialization message: %s\n",strerror(errno));
		return 0;
	}

	return 1;
}
示例#27
0
void _stlink_usb_read_mem32(stlink_t *sl, uint32_t addr, uint16_t len) {
    struct stlink_libusb * const slu = sl->backend_data;
    unsigned char* const data = sl->q_buf;
    unsigned char* const cmd = sl->c_buf;
    ssize_t size;
    int i = fill_command(sl, SG_DXFER_FROM_DEV, len);

    cmd[i++] = STLINK_DEBUG_COMMAND;
    cmd[i++] = STLINK_DEBUG_READMEM_32BIT;
    write_uint32(&cmd[i], addr);
    write_uint16(&cmd[i + 4], len);

    size = send_recv(slu, 1, cmd, slu->cmd_len, data, len);
    if (size == -1) {
        printf("[!] send_recv\n");
        return;
    }

    sl->q_len = (size_t) size;

    stlink_print_data(sl);
}
示例#28
0
static int send_session_term_resp(int s)
{
	uint8_t msg[30];
	uint16_t msg_len = 0;

	/* Write the message header */
	uint8_t* p = write_message_header(msg,DLEP_SESSION_TERM_RESP);

	msg_len = p - msg;

	/* Octet 2 and 3 are the message length, minus the length of the header */
	write_uint16(msg_len - 4,msg + 2);

	printf("Sending Session Termination Response message\n");

	if (send(s,msg,msg_len,0) != msg_len)
	{
		printf("Failed to send Session Termination Response message: %s\n",strerror(errno));
		return -1;
	}

	return 0;
}
示例#29
0
static int send_session_term(int s, enum dlep_status_code sc, uint8_t** msg, uint32_t modem_heartbeat_interval)
{
	uint16_t msg_len = 0;
	uint8_t* p;

	/* Make sure we have room for the header */
	uint8_t* new_msg = realloc(*msg,9);
	if (!new_msg)
	{
		printf("Failed to allocate message buffer");
		return -1;
	}
	*msg = new_msg;

	/* Write the message header */
	p = write_message_header(*msg,DLEP_SESSION_TERM);

	/* Write out our Status Code */
	p = write_status_code(p,sc);

	msg_len = p - *msg;

	/* Octet 2 and 3 are the message length, minus the length of the header */
	write_uint16(msg_len - 4,*msg + 2);

	printf("Sending Session Termination message\n");

	if (send(s,*msg,msg_len,0) != msg_len)
	{
		printf("Failed to send Session Termination message: %s\n",strerror(errno));
		return -1;
	}

	/* Now enter the Session termination state */
	return term_session(s,msg,modem_heartbeat_interval);
}
示例#30
0
文件: dns.c 项目: jintwo/sns
char *pack_header(dns_header_t *header)
{
    size_t header_len = sizeof(dns_header_t);
    char *buf = malloc(header_len);
    char *start = buf;

    buf = write_uint16(buf, &header->id, true);
    buf = write_uint16(buf, (unsigned short *)&header->flags, true);
    buf = write_uint16(buf, &header->qdcount, true);
    buf = write_uint16(buf, &header->ancount, true);
    buf = write_uint16(buf, &header->nscount, true);
    buf = write_uint16(buf, &header->arcount, true);

#ifdef DEBUG
    puts("output header");
    dump_buffer(start, header_len);
#endif

    return start;
}