- Spelling checked
[sip-router] / unixsock_server.h
1 /*
2  * $Id$
3  *
4  * UNIX Domain Socket Server
5  *
6  * Copyright (C) 2001-2004 FhG Fokus
7  *
8  * This file is part of ser, a free SIP server.
9  *
10  * ser is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * For a license to use the ser software under conditions
16  * other than those described here, or to purchase support for this
17  * software, please contact iptel.org by e-mail at the following addresses:
18  *    info@iptel.org
19  *
20  * ser is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License 
26  * along with this program; if not, write to the Free Software 
27  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28  */
29
30 #ifndef _UNIXSOCK_SERVER_H
31 #define _UNIXSOCK_SERVER_H
32
33
34 #include <sys/un.h>
35 #include <unistd.h>
36 #include "str.h"
37
38
39 typedef int (unixsock_f)(str* msg);
40
41
42 struct unixsock_cmd {
43         str name;                   /* The name of the function */
44         unixsock_f* f;              /* Function to be called */
45         struct unixsock_cmd* next;  /* Next element in the linked list */
46 };
47
48
49 /*
50  * Initialize Unix domain socket server
51  */
52 int init_unixsock_socket(void);
53
54
55 /*
56  * Initialize Unix domain socket server
57  */
58 int init_unixsock_children(void);
59
60
61 /*
62  * Clean up
63  */
64 void close_unixsock_server(void);
65
66
67 /*
68  * Register a new command
69  */
70 int unixsock_register_cmd(char* name, unixsock_f* f);
71
72
73 /*
74  * Reset the reply buffer -- start to write
75  * at the beginning
76  */
77 void unixsock_reply_reset(void);
78
79
80 /*
81  * Add ASCIIZ to the reply buffer
82  */
83 int unixsock_reply_asciiz(char* str);
84
85
86 /*
87  * Add a string represented by str structure
88  * to the reply buffer
89  */
90 int unixsock_reply_str(str* s);
91
92
93 /*
94  * Printf-like reply function
95  */
96 int unixsock_reply_printf(char* fmt, ...);
97
98
99 /*
100  * Send the reply
101  */
102 ssize_t unixsock_reply_send(void);
103
104
105 /*
106  * Send the reply to the given destination
107  */
108 ssize_t unixsock_reply_sendto(struct sockaddr_un* to);
109
110
111 /*
112  * Read a line, the result will be stored in line
113  * parameter, the data is not copied, it's just
114  * a pointer to an existing buffer
115  */
116 int unixsock_read_line(str* line, str* source);
117
118
119 /*
120  * Read body until the closing .CRLF, no CRLF recovery
121  * is done so no additional buffer is necessary, body will
122  * point to an existing buffer
123  */
124 int unixsock_read_body(str* body, str* source);
125
126
127 /*
128  * Read a set of lines, the functions performs CRLF recovery,
129  * therefore lineset must point to an additional buffer
130  * to which the data will be copied. Initial lineset->len contains
131  * the size of the buffer
132  */
133 int unixsock_read_lineset(str* lineset, str* source);
134
135
136 /*
137  * Return the address of the sender
138  */
139 struct sockaddr_un* unixsock_sender_addr(void);
140
141
142 #endif /* _UNIXSOCK_SERVER_H */