ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/gvpe/src/rohc/d_util.h
Revision: 1.3
Committed: Tue Apr 26 00:55:56 2005 UTC (19 years, 1 month ago) by pcg
Content type: text/plain
Branch: MAIN
CVS Tags: rel-2_01, rel-3_0, rel-2_2, rel-2_0, rel-2_21, rel-2_22, rel-2_25, HEAD
Changes since 1.2: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 pcg 1.1 /*
2     ROHC Project 2003 at Lulea University of Technology, Sweden.
3     Authors: Andreas Vernersson <andver-8@student.luth.se>
4     Daniel Pettersson <danpet-7@student.luth.se>
5     Erik Soderstrom <soderstrom@yahoo.com>
6     Fredrik Lindstrom <frelin-9@student.luth.se>
7     Johan Stenmark <johste-8@student.luth.se>
8     Martin Juhlin <juhlin@users.sourceforge.net>
9     Mikael Larsson <larmik-9@student.luth.se>
10     Robert Maxe <robmax-1@student.luth.se>
11    
12     Copyright (C) 2003 Andreas Vernersson, Daniel Pettersson,
13     Erik Soderström, Fredrik Lindström, Johan Stenmark,
14     Martin Juhlin, Mikael Larsson, Robert Maxe.
15    
16     This program is free software; you can redistribute it and/or modify
17     it under the terms of the GNU General Public License as published by
18     the Free Software Foundation; either version 2 of the License, or
19     (at your option) any later version.
20    
21     This program is distributed in the hope that it will be useful,
22     but WITHOUT ANY WARRANTY; without even the implied warranty of
23     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24     GNU General Public License for more details.
25    
26     You should have received a copy of the GNU General Public License
27     along with this program; if not, write to the Free Software
28 pcg 1.3 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
29 pcg 1.1 */
30     #ifndef _D_UTIL_H
31     #define _D_UTIL_H
32    
33     #include "rohc.h"
34    
35     #define OLD_REF_VALUE 0
36     #define LAST_REF_VALUE 1
37    
38     // IP-id struct
39     struct sd_ip_id_decode
40     {
41     int id_ref;
42     int sn_ref;
43     };
44    
45     // Least Significant Bits decoding
46     struct sd_lsb_decode
47     {
48     int v_ref_d;
49     int old_v_ref_d;
50     int p;
51     };
52     // initiate the ip-id struct
53     // in: the ip-id struct, the reference for ip-id, the sequenze number
54     void d_ip_id_init(struct sd_ip_id_decode * s,int id_ref, int sn_ref);
55    
56     // Decode the ip-id offset in packet m and return the ip_id
57     // Do not forget to update the id_ref and sn_ref after a crc-success
58     // in: the ip-id struct, the packet m containing the ip-id offset, the
59     // length of the offset and the sequence number of packet m.
60     // out:ip_id
61     int d_ip_id_decode(struct sd_ip_id_decode * s, int m, int length, int sn);
62    
63     // update the reference values for the ip-id and the sequence number
64     void d_ip_id_update(struct sd_ip_id_decode * s, int id_ref, int sn_ref);
65    
66     // update the reference value
67     void d_lsb_update(struct sd_lsb_decode * s, int v_ref_d);
68    
69     // copy the value in v_ref_d to old_v_ref_d
70     void d_lsb_sync_ref(struct sd_lsb_decode * s);
71    
72     // get the old value of v_ref_d
73     int d_get_lsb_old_ref(struct sd_lsb_decode * s);
74    
75     // Decode a LSB-value, do not forget to update the v_ref_d after a CRC-success
76     // in: the struct were the old received value is present
77     // the LSB-value to decode and the length of it in bits
78     //
79     // out:the decoded value
80     int d_lsb_decode(struct sd_lsb_decode * s, int m,int length);
81    
82     // Initiate the lsb struct
83     // in: the value of v_ref_d and type of p value
84     void d_lsb_init(struct sd_lsb_decode * s,int v_ref_d, int p);
85    
86     // get the reference value
87     int d_get_lsb_ref(struct sd_lsb_decode * s);
88    
89     // Decide if the field is a padding field
90     // Return: 1 = padding
91     // 0 = else
92     int d_is_paddning(const unsigned char *);
93    
94     // Decide if the field is a feedback field
95     // Return: 1 = feedback header
96     // 0 = else
97     int d_is_feedback(const unsigned char *);
98    
99     // Decide if the field is a segment field
100     // Return: 1 = segment
101     // 0 = else
102     int d_is_segment(const unsigned char *);
103    
104     // Return the size of the feedback
105     // In: Bytes of a feedback header
106     // Out: Size
107     int d_feedback_size(const unsigned char *);
108    
109     // Decide how many bytes the feedback header is
110     // In: Bytes of a feedback header
111     // Out: the size in bytes (1-2)
112     int d_feedback_headersize(const unsigned char *);
113    
114     // Check if a byte is a add-cid value
115     // It is also possible to use d_decode_add_cid instead.
116     // In: Bytes
117     // Out: 1 = Add-cid value
118     // 0 = else
119     int d_is_add_cid(const unsigned char *);
120    
121     // Decode the add-cid value
122     // In: Bytes
123     // Out: 1-15, cid value
124     // 0, no cid value
125     int d_decode_add_cid(const unsigned char *);
126    
127     // Decide if a byte is a ir-field
128     // In: Bytes
129     // Out: 1 = IR, 0 = else
130     int d_is_ir(const unsigned char *);
131    
132     // Decide if a byte is a irdyn-field
133     // In: Bytes
134     // Out: 1 = IR-Dyn, 0 = else
135     int d_is_irdyn(const unsigned char *);
136    
137     // Decide the size of the self-decsribing variable-length value
138     // In: Bytes
139     // Out: 1-4
140     int d_sdvalue_size(const unsigned char *);
141    
142     // Decode a self-describing variable-length value
143     // In: Bytes
144     // Out: The self-describing variable-length value
145     int d_sdvalue_decode(const unsigned char *);
146    
147     // Decode the static part of a ipv4 rohc packet and store it in a ip-structure
148     // Return the number of used bytes
149     int d_decode_static_ip4(const unsigned char *, struct iphdr * dest);
150    
151     // Decode the static part in a udp rohc packet and store it in a udp-structure
152     // Return the number of used bytes
153     int d_decode_static_udp(const unsigned char *, struct udphdr * dest);
154    
155     // Decode the dynamic part in a ipv4 rohc packet and store it in a ip-structure
156     // Return the number of used bytes
157     int d_decode_dynamic_ip4(const unsigned char *, struct iphdr * dest, int * rnd, int * nbo);
158    
159     // Decode the dynamic part in a udp rohc packet and store it in a udp-structure
160     // Return the number of used bytes
161     int d_decode_dynamic_udp(const unsigned char *, struct udphdr * dest);
162    
163     // Decode the dynamic part in a udp-lite rohc packet and store it in a udp-structure
164     // Return the number of used bytes
165     int d_decode_dynamic_udp_lite(const unsigned char *data, struct udphdr * dest);
166    
167     #endif
168    
169    
170    
171    
172    
173    
174    
175    
176    
177