1 #include "incs.h" 2 3 /* 4 * put/get cat attributes 5 */ 6 7 void test04(void) 8 { 9 RADIUS_PACKET *packet; 10 uint8_t buf[1024]; 11 size_t len; 12 uint8_t *p; 13 14 #define ATTRLEN (256 + 256 + 103) 15 uint8_t data0[ATTRLEN]; 16 uint8_t data1[ATTRLEN]; 17 uint8_t data2[] = { 0x10, 0x20, 0x30, 0x40 }; 18 uint8_t data3[] = { 0x10, 0x20, 0x30, 0x40, 0x10, 0x20, 0x30, 0x40 }; 19 uint8_t attrs[2048]; 20 21 packet = radius_new_request_packet(RADIUS_CODE_ACCESS_REQUEST); 22 23 for (int i = 0; i < ATTRLEN; i++) 24 data0[i] = random(); 25 for (int i = 0; i < ATTRLEN; i++) 26 data1[i] = random(); 27 28 p = attrs; 29 *p++ = 20; *p++ = 6; 30 memcpy(p, data2, 4); p += 4; 31 32 *p++ = 10; *p++ = 255; 33 memcpy(p, data0, 253); p += 253; 34 *p++ = 10; *p++ = 255; 35 memcpy(p, data0 + 253, 253); p += 253; 36 *p++ = 10; *p++ = ATTRLEN-253*2+2; 37 memcpy(p, data0 + 253*2, ATTRLEN-253*2); p += ATTRLEN-253*2; 38 39 *p++ = RADIUS_TYPE_VENDOR_SPECIFIC; *p++ = 255; 40 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 20; *p++ = 30; *p++ = 249; 41 memcpy(p, data1, 247); p += 247; 42 *p++ = RADIUS_TYPE_VENDOR_SPECIFIC; *p++ = 255; 43 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 20; *p++ = 30; *p++ = 249; 44 memcpy(p, data1 + 247, 247); p += 247; 45 *p++ = RADIUS_TYPE_VENDOR_SPECIFIC; *p++ = ATTRLEN-247*2+8; 46 *p++ = 0; *p++ = 0; *p++ = 0; *p++ = 20; *p++ = 30; *p++ = ATTRLEN-247*2+2; 47 memcpy(p, data1 + 247*2, ATTRLEN-247*2); p += ATTRLEN-247*2; 48 49 *p++ = 20; *p++ = 6; 50 memcpy(p, data2, 4); p += 4; 51 52 53 radius_put_raw_attr(packet, 20, data2, sizeof(data2)); 54 radius_put_raw_attr_cat(packet, 10, data0, ATTRLEN); 55 radius_put_vs_raw_attr_cat(packet, 20, 30, data1, ATTRLEN); 56 radius_put_raw_attr(packet, 20, data2, sizeof(data2)); 57 58 CHECK(radius_get_length(packet) == 20 + (p-attrs)); 59 CHECK(memcmp(radius_get_data(packet) + 20, attrs, p-attrs) == 0); 60 61 len = sizeof(buf); 62 CHECK(radius_get_raw_attr_cat(packet, 10, buf, &len) == 0); 63 CHECK(len == ATTRLEN); 64 CHECK(memcmp(buf, data0, len) == 0); 65 66 len = sizeof(buf); 67 CHECK(radius_get_vs_raw_attr_cat(packet, 20, 30, buf, &len) == 0); 68 CHECK(len == ATTRLEN); 69 CHECK(memcmp(buf, data1, len) == 0); 70 71 len = sizeof(buf); 72 CHECK(radius_get_raw_attr_cat(packet, 20,buf, &len) == 0); 73 CHECK(len == sizeof(data3)); 74 CHECK(memcmp(buf, data3, len) == 0); 75 } 76 77 ADD_TEST(test04) 78