1 /*
2  * This software is Copyright (c) 2016 Denis Burykin
3  * [denis_burykin yahoo com], [denis-burykin2014 yandex ru]
4  * and it is hereby released to the general public under the following terms:
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted.
7  *
8  */
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12 
13 #include "pkt_comm.h"
14 #include "word_gen.h"
15 
16 
17 struct word_gen word_gen_words_pass_by = {
18 	0, { }		// 0 ranges
19 };
20 
21 
pkt_word_gen_new(struct word_gen * word_gen)22 struct pkt *pkt_word_gen_new(struct word_gen *word_gen)
23 {
24 	int max_len = sizeof(struct word_gen) + 5;
25 	char *data = malloc(max_len);
26 
27 	if (!data) {
28 		pkt_error("pkt_word_gen_new(): unable to allocate %d bytes\n",
29 				max_len);
30 		return NULL;
31 	}
32 	int offset = 0;
33 
34 	int i;
35 	data[offset++] = word_gen->num_ranges;
36 	for (i = 0; i < word_gen->num_ranges; i++) {
37 		struct word_gen_char_range *range = &word_gen->ranges[i];
38 		data[offset++] = range->num_chars;
39 		data[offset++] = 0;
40 		memcpy(data + offset, range->chars, range->num_chars);
41 		offset += range->num_chars;
42 	}
43 
44 	*((uint32_t*)(data + offset)) = 0;
45 	offset += 4;
46 
47 	// word_gen_v2 doesn't have this stuff
48 	//data[offset++] = word_gen->num_words;
49 	//for (i = 0; i < word_gen->num_words; i++) {
50 	//	data[offset++] = word_gen->word_insert_pos[i];
51 	//}
52 
53 	data[offset++] = 0xBB;
54 
55 	struct pkt *pkt = pkt_new(PKT_TYPE_WORD_GEN, data, offset);
56 
57 	return pkt;
58 }
59