annotate libfdproto/dictionary_functions.c @ 1554:566bb46cc73f

Updated copyright information
author Sebastien Decugis <sdecugis@freediameter.net>
date Tue, 06 Oct 2020 21:34:53 +0800
parents 3cbe458fbfa9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
1 /*********************************************************************************************************
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
4 * *
1554
566bb46cc73f Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1405
diff changeset
5 * Copyright (c) 2020, WIDE Project and NICT *
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
6 * All rights reserved. *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
7 * *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
10 * *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
13 * following disclaimer. *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
14 * *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
18 * materials provided with the distribution. *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
19 * *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
22 * promote products derived from this software without *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
24 * NICT. *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
25 * *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
34 *********************************************************************************************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
35
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
36 #include "fdproto-internal.h"
1225
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
37 #include <time.h>
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
38
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
39 /* This file contains helpers functions to be reused as callbacks in the struct dict_type_data structure.
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
40 There are three callbacks there:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
41
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
42 - type_encode :
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
43 - type_interpret :
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
44 Those two callbacks allow to manipulate more natural structures of data in the code, and to
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
45 map transparently these natural structures with the AVP-encoded format by calling the functions
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
46 msg_avp_value_encode or msg_avp_value_interpret.
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
47 - type_dump :
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
48 This callback if provided gives a more human-readable debug information.
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
49
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
50 */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
51
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
52 /****************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
53 /* Address AVP type */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
54 /****************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
55
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
56 /* The interpret and encode functions work with a "struct sockaddr_storage" pointer for mapping
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
57 the contents of the AVP */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
58
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
59 int fd_dictfct_Address_encode(void * data, union avp_value * avp_value)
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
60 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
61 sSS * ss = (sSS *) data;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
62 uint16_t AddressType = 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
63 size_t size = 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
64 unsigned char * buf = NULL;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
65
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
66 TRACE_ENTRY("%p %p", data, avp_value);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
67 CHECK_PARAMS( data && avp_value );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
68
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
69 switch (ss->ss_family) {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
70 case AF_INET:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
71 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
72 /* We are encoding an IP address */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
73 sSA4 * sin = (sSA4 *)ss;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
74
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
75 AddressType = 1;/* see http://www.iana.org/assignments/address-family-numbers/ */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
76 size = 6; /* 2 for AddressType + 4 for data */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
77
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
78 CHECK_MALLOC( buf = malloc(size) );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
79
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
80 /* may not work because of alignment: *(uint32_t *)(buf+2) = htonl(sin->sin_addr.s_addr); */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
81 memcpy(buf + 2, &sin->sin_addr.s_addr, 4);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
82 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
83 break;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
84
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
85 case AF_INET6:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
86 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
87 /* We are encoding an IPv6 address */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
88 sSA6 * sin6 = (sSA6 *)ss;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
89
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
90 AddressType = 2;/* see http://www.iana.org/assignments/address-family-numbers/ */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
91 size = 18; /* 2 for AddressType + 16 for data */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
92
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
93 CHECK_MALLOC( buf = malloc(size) );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
94
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
95 /* The order is already good here */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
96 memcpy(buf + 2, &sin6->sin6_addr.s6_addr, 16);
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
97
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
98 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
99 break;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
100
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
101 default:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
102 CHECK_PARAMS( AddressType = 0 );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
103 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
104
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
105 *(uint16_t *)buf = htons(AddressType);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
106
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
107 avp_value->os.len = size;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
108 avp_value->os.data = buf;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
109
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
110 return 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
111 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
112
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
113 int fd_dictfct_Address_interpret(union avp_value * avp_value, void * interpreted)
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
114 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
115 uint16_t AddressType = 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
116 unsigned char * buf;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
117
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
118 TRACE_ENTRY("%p %p", avp_value, interpreted);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
119
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
120 CHECK_PARAMS( avp_value && interpreted && (avp_value->os.len >= 2) );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
121
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
122 AddressType = ntohs(*(uint16_t *)avp_value->os.data);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
123 buf = &avp_value->os.data[2];
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
124
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
125 switch (AddressType) {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
126 case 1 /* IP */:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
127 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
128 sSA4 * sin = (sSA4 *)interpreted;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
129
1136
140450615773 Revert changeset 1122 (ADDRESS_AVP_INCLUDE_PORT) as this will create too much interop issues. The Host-IP-Address AVP is not normally used to discover peer address, but only for validation of the addresses where a packet is received from -- which is quite useless with a connected transport connection, but anyway...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
130 CHECK_PARAMS( avp_value->os.len == 6 );
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
131
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
132 sin->sin_family = AF_INET;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
133 /* sin->sin_addr.s_addr = ntohl( * (uint32_t *) buf); -- may not work because of bad alignment */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
134 memcpy(&sin->sin_addr.s_addr, buf, 4);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
135 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
136 break;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
137
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
138 case 2 /* IP6 */:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
139 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
140 sSA6 * sin6 = (sSA6 *)interpreted;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
141
1136
140450615773 Revert changeset 1122 (ADDRESS_AVP_INCLUDE_PORT) as this will create too much interop issues. The Host-IP-Address AVP is not normally used to discover peer address, but only for validation of the addresses where a packet is received from -- which is quite useless with a connected transport connection, but anyway...
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1122
diff changeset
142 CHECK_PARAMS( avp_value->os.len == 18 );
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
143
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
144 sin6->sin6_family = AF_INET6;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
145 memcpy(&sin6->sin6_addr.s6_addr, buf, 16);
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
146
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
147 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
148 break;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
149
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
150 default:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
151 CHECK_PARAMS( AddressType = 0 );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
152 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
153
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
154 return 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
155 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
156
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
157 /* Dump the content of an Address AVP */
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
158 DECLARE_FD_DUMP_PROTOTYPE(fd_dictfct_Address_dump, union avp_value * avp_value)
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
159 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
160 union {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
161 sSA sa;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
162 sSS ss;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
163 sSA4 sin;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
164 sSA6 sin6;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
165 } s;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
166 uint16_t fam;
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
167
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
168 FD_DUMP_HANDLE_OFFSET();
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
169
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
170 memset(&s, 0, sizeof(s));
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
171
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
172 /* The first two octets represent the address family, http://www.iana.org/assignments/address-family-numbers/ */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
173 if (avp_value->os.len < 2) {
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
174 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "[invalid length: %zd]", avp_value->os.len), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
175 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
176 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
177
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
178 /* Following octets are the address in network byte order already */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
179 fam = avp_value->os.data[0] << 8 | avp_value->os.data[1];
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
180 switch (fam) {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
181 case 1:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
182 /* IP */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
183 s.sa.sa_family = AF_INET;
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
184 if ((avp_value->os.len != 6) && (avp_value->os.len != 8)) {
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
185 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "[invalid IP length: %zd]", avp_value->os.len), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
186 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
187 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
188 memcpy(&s.sin.sin_addr.s_addr, avp_value->os.data + 2, 4);
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
189 if (avp_value->os.len == 8)
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
190 memcpy(&s.sin.sin_port, avp_value->os.data + 6, 2);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
191 break;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
192 case 2:
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
193 /* IP6 */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
194 s.sa.sa_family = AF_INET6;
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
195 if ((avp_value->os.len != 18) && (avp_value->os.len != 20)) {
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
196 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "[invalid IP6 length: %zd]", avp_value->os.len), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
197 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
198 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
199 memcpy(&s.sin6.sin6_addr.s6_addr, avp_value->os.data + 2, 16);
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
200 if (avp_value->os.len == 20)
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
201 memcpy(&s.sin6.sin6_port, avp_value->os.data + 18, 2);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
202 break;
1261
d51fa7231f73 Add support for dumping address family 8 (E.164).
Thomas Klausner <tk@giga.or.at>
parents: 1225
diff changeset
203 case 8:
d51fa7231f73 Add support for dumping address family 8 (E.164).
Thomas Klausner <tk@giga.or.at>
parents: 1225
diff changeset
204 /* E.164 */
1284
38e4a7c318ac Fix a number of compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1281
diff changeset
205 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "%.*s", (int)(avp_value->os.len-2), avp_value->os.data+2), return NULL);
1261
d51fa7231f73 Add support for dumping address family 8 (E.164).
Thomas Klausner <tk@giga.or.at>
parents: 1225
diff changeset
206 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
207 default:
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
208 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "[unsupported family: 0x%hx]", fam), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
209 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
210 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
211
1122
d4371b7aa0ff New CMake option: ADDRESS_AVP_INCLUDE_PORT. Turn off for standard Host-IP-Address AVPs
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1093
diff changeset
212 return fd_sa_dump(FD_DUMP_STD_PARAMS, &s.sa, NI_NUMERICHOST);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
213 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
214
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
215
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
216
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
217 /*******************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
218 /* UTF8String AVP type */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
219 /*******************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
220
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
221 /* Dump the AVP in a natural human-readable format. This dumps the complete length of the AVP, it is up to the caller to truncate if needed */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
222 DECLARE_FD_DUMP_PROTOTYPE(fd_dictfct_UTF8String_dump, union avp_value * avp_value)
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
223 {
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
224 size_t l;
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
225 FD_DUMP_HANDLE_OFFSET();
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
226
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
227 l = avp_value->os.len;
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
228 /* Just in case the string ends in invalid UTF-8 chars, we shorten it */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
229 while ((l > 0) && (avp_value->os.data[l - 1] & 0x80)) {
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
230 /* this byte is start or cont. of multibyte sequence, as we do not know the next byte we need to delete it. */
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
231 l--;
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
232 if (avp_value->os.data[l] & 0x40)
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
233 break; /* This was a start byte, we can stop the loop */
1035
2f989d1a21e9 Improve dumper for time, and print longer UTF8 strings.
Thomas Klausner <tk@giga.or.at>
parents: 1033
diff changeset
234 }
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
235
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
236 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "\"%.*s\"", (int)l, (char *)avp_value->os.data), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
237
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
238 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
239 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
240
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
241
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
242 /*******************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
243 /* Time AVP type */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
244 /*******************************/
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
245
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
246 /* The interpret and encode functions work with a "time_t" pointer for mapping
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
247 the contents of the AVP */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
248
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
249 /* Unix Epoch starts 1970-01-01, NTP 0 is at 1900-01-01 */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
250 #define DIFF_EPOCH_TO_NTP ((365*(1970-1900) + 17ul) * 24 * 60 * 60)
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
251
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
252 static int diameter_string_to_time_t(const char *str, size_t len, time_t *result) {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
253 time_t time_stamp;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
254 CHECK_PARAMS(len == 4);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
255
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
256 time_stamp = (((unsigned long)(str[0]&0xff))<<24) + ((str[1]&0xff)<<16) + ((str[2]&0xff)<<8) + ((str[3]&0xff));
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
257 time_stamp -= DIFF_EPOCH_TO_NTP;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
258 #ifdef FIX__NEEDED_FOR_YEAR_2036_AND_LATER
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
259 /* NTP overflows in 2036; after that, values start at zero again */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
260 #define NTP_OVERFLOW_CORRECTION (0x100000000ull)
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
261 /* XXX: debug and find correct conversion */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
262 if (str[0] & 0x80 == 0x00) {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
263 time_stamp += NTP_OVERFLOW_CORRECTION;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
264 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
265 #endif
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
266 *result = time_stamp;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
267 return 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
268 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
269
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
270 static int time_t_to_diameter_string(time_t time_stamp, char **result) {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
271 uint64_t out = time_stamp;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
272 char *conv;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
273 /* XXX: 2036 fix */
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
274 out += DIFF_EPOCH_TO_NTP;
1033
000e1904074c Fix a number of additional warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1029
diff changeset
275 CHECK_PARAMS( (out >> 32) == 0);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
276
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
277 CHECK_MALLOC(conv=(char *)malloc(5));
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
278
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
279 conv[0] = (out>>24) & 0xff;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
280 conv[1] = (out>>16) & 0xff;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
281 conv[2] = (out>> 8) & 0xff;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
282 conv[3] = out & 0xff;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
283 conv[4] = '\0';
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
284 *result = conv;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
285 return 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
286 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
287
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
288 int fd_dictfct_Time_encode(void * data, union avp_value * avp_value)
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
289 {
1405
3cbe458fbfa9 Fix compiler warnings
Luke Mewburn <luke@mewburn.net>
parents: 1300
diff changeset
290 char * buf = NULL;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
291 size_t len;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
292
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
293 TRACE_ENTRY("%p %p", data, avp_value);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
294 CHECK_PARAMS( data && avp_value );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
295
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
296 CHECK_FCT( time_t_to_diameter_string( *((time_t *)data), &buf) );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
297 /* FIXME: return len from the function above? */ len = 4;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
298
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
299 avp_value->os.len = len;
1029
e63de8d76916 Remove a few remaining warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 923
diff changeset
300 avp_value->os.data = (uint8_t *)buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
301 return 0;
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
302 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
303
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
304 int fd_dictfct_Time_interpret(union avp_value * avp_value, void * interpreted)
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
305 {
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
306 TRACE_ENTRY("%p %p", avp_value, interpreted);
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
307
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
308 CHECK_PARAMS( avp_value && interpreted );
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
309
1033
000e1904074c Fix a number of additional warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1029
diff changeset
310 return diameter_string_to_time_t((const char *)avp_value->os.data, avp_value->os.len, interpreted);
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
311 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
312
1225
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
313 static void _format_offs (long offset, char *buf) {
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
314 int offs_hours, offs_minutes, sgn = 1;
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
315 if (offset < 0) {
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
316 offset = -offset;
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
317 sgn = 1;
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
318 }
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
319 offs_hours = (int)(offset/3600);
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
320 offs_minutes = (offset%3600)/60;
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
321
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
322 char* s = buf;
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
323
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
324 *(s++) = sgn == 1 ? '+' : '-';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
325 *(s++) = (char)(offs_hours/10) + '0';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
326 *(s++) = offs_hours%10 + '0';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
327
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
328 if (offs_minutes == 0) {
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
329 *(s++) = '\0';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
330 } else {
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
331 *(s++) = (char)(offs_minutes/10) + '0';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
332 *(s++) = offs_minutes%10 + '0';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
333 *(s++) = '\0';
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
334 }
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
335 }
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
336
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
337 DECLARE_FD_DUMP_PROTOTYPE(fd_dictfct_Time_dump, union avp_value * avp_value)
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
338 {
1035
2f989d1a21e9 Improve dumper for time, and print longer UTF8 strings.
Thomas Klausner <tk@giga.or.at>
parents: 1033
diff changeset
339 time_t val;
2f989d1a21e9 Improve dumper for time, and print longer UTF8 strings.
Thomas Klausner <tk@giga.or.at>
parents: 1033
diff changeset
340 struct tm conv;
1225
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
341 char tz_buf[7];
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
342
1093
44f3e48dfe27 Align the behavior of all fd_*dump functions wrt final \n
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1085
diff changeset
343 FD_DUMP_HANDLE_OFFSET();
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
344
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
345 if (avp_value->os.len != 4) {
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
346 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "[invalid length: %zd]", avp_value->os.len), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
347 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
348 }
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
349
1052
b3d623f04b6d Fix a number of remaining compilation warnings
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1035
diff changeset
350 if (diameter_string_to_time_t((char *)avp_value->os.data, avp_value->os.len, &val) != 0) {
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
351 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "[time conversion error]"), return NULL);
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
352 return *buf;
1035
2f989d1a21e9 Improve dumper for time, and print longer UTF8 strings.
Thomas Klausner <tk@giga.or.at>
parents: 1033
diff changeset
353 }
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
354
1225
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
355 CHECK_MALLOC_DO( localtime_r(&val, &conv), return NULL);
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
356 _format_offs(conv.tm_gmtoff, tz_buf);
ce8bc8227ef4 Print times in localtime, not UTC.
Thomas Klausner <tk@giga.or.at>
parents: 1222
diff changeset
357 CHECK_MALLOC_DO( fd_dump_extend(FD_DUMP_STD_PARAMS, "%d%02d%02dT%02d%02d%02d%s", conv.tm_year+1900, conv.tm_mon+1, conv.tm_mday, conv.tm_hour, conv.tm_min, conv.tm_sec, tz_buf), return NULL);
1085
7d7266115a34 Cleaning of the traces in progress
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1052
diff changeset
358 return *buf;
922
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
359 }
c7bf1a7a4e90 Split the encoders/interpreters for the dictionary types into a different file for better reusability, add decoder/interpreter for Time type based on code from Thomas Klausner
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff changeset
360
1300
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
361 /* Check that a given AVP value contains all the characters from data in the same order */
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
362 static char error_message[80];
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
363 int fd_dictfct_CharInOS_check(void * data, union avp_value * val, char ** error_msg)
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
364 {
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
365 char * inChar = data;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
366 char * inData = (char *)val->os.data;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
367 int i = 0;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
368 CHECK_PARAMS(data);
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
369 while (*inChar != '\0') {
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
370 while (i < val->os.len) {
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
371 if (*inChar == inData[i++]) {
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
372 inChar++;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
373 break;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
374 }
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
375 }
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
376 if (i >= val->os.len)
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
377 break;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
378 }
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
379 if (*inChar == '\0')
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
380 return 0;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
381
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
382 if (error_msg) {
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
383 snprintf(error_message, sizeof(error_message), "Could not find '%c' in AVP", *inChar);
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
384 *error_msg = error_message;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
385 }
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
386 return EBADMSG;
3f1e79e1273e Added new callbacks in the derived types definitions to improve value checks during message parsing. Thanks Ranjith for the suggestion.
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1284
diff changeset
387 }
"Welcome to our mercurial repository"