File: parse_param.h

package info (click to toggle)
openser 1.1.0-9etch1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 9,828 kB
  • ctags: 11,809
  • sloc: ansic: 120,528; sh: 5,249; yacc: 1,716; makefile: 1,261; php: 656; perl: 205; sql: 190
file content (155 lines) | stat: -rw-r--r-- 4,145 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/* 
 * $Id: parse_param.h,v 1.3 2005/12/06 18:54:02 bogdan_iancu Exp $
 *
 * Generic Parameter Parser
 *
 * Copyright (C) 2001-2003 FhG Fokus
 *
 * This file is part of openser, a free SIP server.
 *
 * openser is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version
 *
 * openser is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License 
 * along with this program; if not, write to the Free Software 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * History:
 * -------
 * 2003-03-24 Created by janakj
 * 2003-04-07 shm duplication support (janakj)
 * 2003-04-07 URI class added (janakj)
 */

#ifndef PARSE_PARAM_H
#define PARSE_PARAM_H

#include <stdio.h>


/*
 * Supported types of parameters
 */
typedef enum ptype {
	P_OTHER = 0, /* Unknown parameter */
	P_Q,         /* Contact: q parameter */
	P_EXPIRES,   /* Contact: expires parameter */
	P_METHODS,   /* Contact: methods parameter (RFC 3840) */
	P_RECEIVED,  /* Contact: received parameter */
	P_TRANSPORT, /* URI: transport parameter */
	P_LR,        /* URI: lr parameter */
	P_R2,        /* URI: r2 parameter (ser specific) */
	P_MADDR,     /* URI: maddr parameter */
	P_TTL,       /* URI: ttl parameter */
	P_DSTIP,     /* URI: dstip parameter */
	P_DSTPORT,   /* URi: dstport parameter */
} ptype_t;


/*
 * Class of parameters
 */
typedef enum pclass {
	CLASS_ANY = 0,  /* Any parameters, well-known hooks will be not used */
	CLASS_CONTACT,  /* Contact parameters */
	CLASS_URI       /* URI parameters */
} pclass_t;


/*
 * Structure representing a parameter
 */
typedef struct param {
	ptype_t type;         /* Type of the parameter */
	str name;             /* Parameter name */
	str body;             /* Parameter body */
	int len;              /* Total length of the parameter including = and quotes */
	struct param* next;   /* Next parameter in the list */
} param_t;


/*
 * Hooks to well known parameters for contact class of parameters
 */
struct contact_hooks {
	struct param* expires;  /* expires parameter */
	struct param* q;        /* q parameter */
	struct param* methods;  /* methods parameter (RFC 3840) */
	struct param* received; /* received parameter */
};


/*
 * Hooks to well known parameter for URI class of parameters
 */
struct uri_hooks {
	struct param* transport; /* transport parameter */
	struct param* lr;        /* lr parameter */
	struct param* r2;        /* r2 parameter */
	struct param* maddr;     /* maddr parameter */
	struct param* ttl;       /* ttl parameter */
	struct param* dstip;     /* Destination IP */
	struct param* dstport;   /* Destination port */
};


/*
 * Union of hooks structures for all classes
 */
typedef union param_hooks {
	struct contact_hooks contact; /* Contact hooks */
	struct uri_hooks uri;         /* URI hooks */
} param_hooks_t;


/*
 * Parse parameters
 * _s is string containing parameters
 * _c is class of parameters
 * _h is pointer to structure that will be filled with pointer to well known parameters
 * linked list of parsed parameters will be stored in
 * the variable _p is pointing to
 * The function returns 0 on success and negative number
 * on an error
 */
int parse_params(str* _s, pclass_t _c, param_hooks_t* _h, param_t** _p);


/*
 * Free linked list of parameters
 */
void free_params(param_t* _p);


/*
 * Free linked list of parameters from shared memory
 */
void shm_free_params(param_t* _p);


/*
 * Print linked list of parameters, just for debugging
 */
void print_params(FILE* _o, param_t* _p);


/*
 * Duplicate linked list of parameters
 */
int duplicate_params(param_t** _n, param_t* _p);


/*
 * Duplicate linked list of parameters
 */
int shm_duplicate_params(param_t** _n, param_t* _p);


#endif /* PARSE_PARAM_H */