oversip_p 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. checksums.yaml +7 -0
  2. data/AUTHORS +22 -0
  3. data/LICENSE +25 -0
  4. data/README.md +43 -0
  5. data/Rakefile +54 -0
  6. data/bin/oversip +184 -0
  7. data/etc/oversip.conf +274 -0
  8. data/etc/proxies.conf +145 -0
  9. data/etc/server.rb +315 -0
  10. data/etc/tls/ca/cacert.pem +3894 -0
  11. data/etc/tls/demo-tls.oversip.net.crt +17 -0
  12. data/etc/tls/demo-tls.oversip.net.key +15 -0
  13. data/etc/tls/upgrade-cacert.sh +12 -0
  14. data/etc/tls/utils/create-cert.rb +162 -0
  15. data/etc/tls/utils/get-sip-identities.rb +95 -0
  16. data/ext/common/c_util.h +74 -0
  17. data/ext/common/ruby_c_util.h +88 -0
  18. data/ext/sip_parser/common_headers.h +210 -0
  19. data/ext/sip_parser/ext_help.h +18 -0
  20. data/ext/sip_parser/extconf.rb +3 -0
  21. data/ext/sip_parser/sip_message_parser.c +29741 -0
  22. data/ext/sip_parser/sip_parser.h +250 -0
  23. data/ext/sip_parser/sip_parser_ruby.c +1370 -0
  24. data/ext/sip_parser/sip_uri_parser.c +39699 -0
  25. data/ext/stud/extconf.rb +43 -0
  26. data/ext/stun/ext_help.h +16 -0
  27. data/ext/stun/extconf.rb +3 -0
  28. data/ext/stun/stun_ruby.c +394 -0
  29. data/ext/utils/ext_help.h +14 -0
  30. data/ext/utils/extconf.rb +3 -0
  31. data/ext/utils/haproxy_protocol.c +6163 -0
  32. data/ext/utils/haproxy_protocol.h +27 -0
  33. data/ext/utils/ip_utils.c +5952 -0
  34. data/ext/utils/ip_utils.h +64 -0
  35. data/ext/utils/outbound_utils.c +3227 -0
  36. data/ext/utils/outbound_utils.h +27 -0
  37. data/ext/utils/utils_ruby.c +392 -0
  38. data/ext/utils/utils_ruby.h +76 -0
  39. data/ext/websocket_framing_utils/ext_help.h +18 -0
  40. data/ext/websocket_framing_utils/extconf.rb +3 -0
  41. data/ext/websocket_framing_utils/ws_framing_utils.h +47 -0
  42. data/ext/websocket_framing_utils/ws_framing_utils_ruby.c +135 -0
  43. data/ext/websocket_http_parser/ext_help.h +18 -0
  44. data/ext/websocket_http_parser/extconf.rb +3 -0
  45. data/ext/websocket_http_parser/ws_http_parser.c +1635 -0
  46. data/ext/websocket_http_parser/ws_http_parser.h +87 -0
  47. data/ext/websocket_http_parser/ws_http_parser_ruby.c +630 -0
  48. data/lib/oversip/config.rb +597 -0
  49. data/lib/oversip/config_validators.rb +126 -0
  50. data/lib/oversip/default_server.rb +52 -0
  51. data/lib/oversip/errors.rb +10 -0
  52. data/lib/oversip/fiber_pool.rb +56 -0
  53. data/lib/oversip/launcher.rb +635 -0
  54. data/lib/oversip/logger.rb +84 -0
  55. data/lib/oversip/modules/outbound_mangling.rb +56 -0
  56. data/lib/oversip/modules/user_assertion.rb +73 -0
  57. data/lib/oversip/proxies_config.rb +189 -0
  58. data/lib/oversip/ruby_ext/eventmachine.rb +38 -0
  59. data/lib/oversip/sip/client.rb +428 -0
  60. data/lib/oversip/sip/client_transaction.rb +586 -0
  61. data/lib/oversip/sip/constants.rb +88 -0
  62. data/lib/oversip/sip/core.rb +217 -0
  63. data/lib/oversip/sip/launcher.rb +221 -0
  64. data/lib/oversip/sip/listeners/connection.rb +54 -0
  65. data/lib/oversip/sip/listeners/ipv4_tcp_client.rb +21 -0
  66. data/lib/oversip/sip/listeners/ipv4_tcp_server.rb +22 -0
  67. data/lib/oversip/sip/listeners/ipv4_tls_client.rb +21 -0
  68. data/lib/oversip/sip/listeners/ipv4_tls_server.rb +22 -0
  69. data/lib/oversip/sip/listeners/ipv4_tls_tunnel_server.rb +22 -0
  70. data/lib/oversip/sip/listeners/ipv4_udp_server.rb +21 -0
  71. data/lib/oversip/sip/listeners/ipv6_tcp_client.rb +21 -0
  72. data/lib/oversip/sip/listeners/ipv6_tcp_server.rb +22 -0
  73. data/lib/oversip/sip/listeners/ipv6_tls_client.rb +21 -0
  74. data/lib/oversip/sip/listeners/ipv6_tls_server.rb +22 -0
  75. data/lib/oversip/sip/listeners/ipv6_tls_tunnel_server.rb +22 -0
  76. data/lib/oversip/sip/listeners/ipv6_udp_server.rb +21 -0
  77. data/lib/oversip/sip/listeners/tcp_client.rb +97 -0
  78. data/lib/oversip/sip/listeners/tcp_connection.rb +202 -0
  79. data/lib/oversip/sip/listeners/tcp_server.rb +71 -0
  80. data/lib/oversip/sip/listeners/tls_client.rb +125 -0
  81. data/lib/oversip/sip/listeners/tls_server.rb +88 -0
  82. data/lib/oversip/sip/listeners/tls_tunnel_connection.rb +89 -0
  83. data/lib/oversip/sip/listeners/tls_tunnel_server.rb +61 -0
  84. data/lib/oversip/sip/listeners/udp_connection.rb +214 -0
  85. data/lib/oversip/sip/listeners.rb +24 -0
  86. data/lib/oversip/sip/message.rb +177 -0
  87. data/lib/oversip/sip/message_processor.rb +213 -0
  88. data/lib/oversip/sip/name_addr.rb +51 -0
  89. data/lib/oversip/sip/proxy.rb +324 -0
  90. data/lib/oversip/sip/request.rb +179 -0
  91. data/lib/oversip/sip/response.rb +37 -0
  92. data/lib/oversip/sip/rfc3263.rb +643 -0
  93. data/lib/oversip/sip/server_transaction.rb +295 -0
  94. data/lib/oversip/sip/sip.rb +76 -0
  95. data/lib/oversip/sip/tags.rb +39 -0
  96. data/lib/oversip/sip/timers.rb +55 -0
  97. data/lib/oversip/sip/transport_manager.rb +130 -0
  98. data/lib/oversip/sip/uac.rb +89 -0
  99. data/lib/oversip/sip/uac_request.rb +84 -0
  100. data/lib/oversip/sip/uri.rb +208 -0
  101. data/lib/oversip/syslog.rb +68 -0
  102. data/lib/oversip/system_callbacks.rb +45 -0
  103. data/lib/oversip/tls.rb +172 -0
  104. data/lib/oversip/utils.rb +30 -0
  105. data/lib/oversip/version.rb +21 -0
  106. data/lib/oversip/websocket/constants.rb +55 -0
  107. data/lib/oversip/websocket/http_request.rb +59 -0
  108. data/lib/oversip/websocket/launcher.rb +183 -0
  109. data/lib/oversip/websocket/listeners/connection.rb +51 -0
  110. data/lib/oversip/websocket/listeners/ipv4_ws_server.rb +22 -0
  111. data/lib/oversip/websocket/listeners/ipv4_wss_server.rb +22 -0
  112. data/lib/oversip/websocket/listeners/ipv4_wss_tunnel_server.rb +22 -0
  113. data/lib/oversip/websocket/listeners/ipv6_ws_server.rb +22 -0
  114. data/lib/oversip/websocket/listeners/ipv6_wss_server.rb +22 -0
  115. data/lib/oversip/websocket/listeners/ipv6_wss_tunnel_server.rb +22 -0
  116. data/lib/oversip/websocket/listeners/ws_server.rb +331 -0
  117. data/lib/oversip/websocket/listeners/wss_server.rb +88 -0
  118. data/lib/oversip/websocket/listeners/wss_tunnel_server.rb +133 -0
  119. data/lib/oversip/websocket/listeners.rb +13 -0
  120. data/lib/oversip/websocket/websocket.rb +13 -0
  121. data/lib/oversip/websocket/ws_framing.rb +545 -0
  122. data/lib/oversip/websocket/ws_sip_app.rb +120 -0
  123. data/lib/oversip.rb +127 -0
  124. data/test/oversip_test_helper.rb +19 -0
  125. data/test/test_http_parser.rb +73 -0
  126. data/test/test_name_addr.rb +27 -0
  127. data/test/test_name_addr_parser.rb +24 -0
  128. data/test/test_sip_message_parser.rb +168 -0
  129. data/test/test_sip_uri_parser.rb +56 -0
  130. data/test/test_uri.rb +68 -0
  131. data/thirdparty/stud/stud.tar.gz +0 -0
  132. metadata +334 -0
@@ -0,0 +1,250 @@
1
+ #ifndef sip_parser_h
2
+ #define sip_parser_h
3
+
4
+
5
+ #include <ruby.h>
6
+ #include <sys/types.h>
7
+
8
+
9
+ enum data_type {
10
+ sip_request = 1,
11
+ sip_response,
12
+ outbound_keepalive
13
+ };
14
+
15
+ enum method {
16
+ method_INVITE = 1,
17
+ method_ACK,
18
+ method_CANCEL,
19
+ method_PRACK,
20
+ method_BYE,
21
+ method_REFER,
22
+ method_INFO,
23
+ method_UPDATE,
24
+ method_OPTIONS,
25
+ method_REGISTER,
26
+ method_MESSAGE,
27
+ method_SUBSCRIBE,
28
+ method_NOTIFY,
29
+ method_PUBLISH,
30
+ method_PULL,
31
+ method_PUSH,
32
+ method_STORE,
33
+ method_unknown
34
+ };
35
+
36
+ enum component {
37
+ component_ruri = 1,
38
+ component_from,
39
+ component_to,
40
+ component_route,
41
+ component_route_uri,
42
+ component_contact
43
+ };
44
+
45
+ enum uri_owner {
46
+ uri_owner_ruri = 1,
47
+ uri_owner_from,
48
+ uri_owner_to,
49
+ uri_owner_route,
50
+ uri_owner_contact
51
+ };
52
+
53
+ enum uri_scheme {
54
+ uri_scheme_sip = 1,
55
+ uri_scheme_sips,
56
+ uri_scheme_tel,
57
+ uri_scheme_unknown
58
+ };
59
+
60
+ enum uri_param_name {
61
+ uri_param_transport = 1,
62
+ uri_param_lr,
63
+ uri_param_ob,
64
+ uri_param_ovid,
65
+ uri_tel_phone_context
66
+ };
67
+
68
+ enum host_type {
69
+ host_type_domain = 1,
70
+ host_type_ipv4,
71
+ host_type_ipv6
72
+ };
73
+
74
+ enum header_field {
75
+ header_field_any = 0,
76
+ header_field_via,
77
+ header_field_from,
78
+ header_field_to,
79
+ header_field_route,
80
+ header_field_supported,
81
+ header_field_require,
82
+ header_field_proxy_require,
83
+ header_field_contact
84
+ };
85
+
86
+ enum transport {
87
+ transport_udp = 1,
88
+ transport_tcp,
89
+ transport_tls,
90
+ transport_sctp,
91
+ transport_ws,
92
+ transport_wss,
93
+ transport_unknown
94
+ };
95
+
96
+ typedef void (*data_type_cb)(void *parser, enum data_type value);
97
+ typedef void (*msg_method_cb)(VALUE parsed, const char *at, size_t length, enum method method);
98
+ typedef void (*msg_element_cb)(VALUE parsed, const char *at, size_t length);
99
+ typedef void (*msg_has_param_cb)(VALUE parsed);
100
+ typedef void (*header_core_value_cb)(VALUE parsed, enum header_field header_field, const char *at, size_t length);
101
+ typedef void (*header_param_cb)(VALUE parsed, enum header_field header_field, const char *key, size_t key_len, const char *value, size_t value_len);
102
+ typedef void (*header_cb)(VALUE parsed, const char *hdr_field, size_t hdr_field_len, const char *hdr_value, size_t hdr_value_len, enum header_field hdr_field_name);
103
+ typedef void (*uri_element_cb)(VALUE parsed, enum uri_owner owner, const char *at, size_t length, enum uri_scheme);
104
+ typedef void (*uri_element2_cb)(VALUE parsed, enum uri_owner owner, const char *at, size_t length, int type);
105
+ typedef void (*uri_param_cb)(VALUE parsed, enum uri_owner owner, const char *key, size_t key_len, const char *value, size_t value_len);
106
+ typedef void (*uri_known_param_cb)(VALUE parsed, enum uri_owner owner, enum uri_param_name, const char *at, size_t length, int uri_param_value);
107
+ typedef void (*uri_has_param_cb)(VALUE parsed, enum uri_owner, enum uri_param_name);
108
+ typedef void (*option_tag_cb)(VALUE parsed, enum header_field, const char *at, size_t length);
109
+ typedef void (*init_component_cb)(VALUE parsed, enum component);
110
+
111
+
112
+ typedef struct struct_message {
113
+ msg_method_cb method;
114
+ msg_element_cb sip_version;
115
+ msg_element_cb status_code;
116
+ msg_element_cb reason_phrase;
117
+ msg_element_cb via_sent_by_host;
118
+ msg_element_cb via_sent_by_port;
119
+ msg_element_cb via_branch;
120
+ msg_element_cb via_branch_rfc3261;
121
+ msg_element_cb via_received;
122
+ msg_has_param_cb via_has_rport;
123
+ msg_has_param_cb via_has_alias;
124
+ msg_element_cb call_id;
125
+ msg_element_cb cseq_number;
126
+ msg_element_cb max_forwards;
127
+ msg_element_cb content_length;
128
+ msg_element_cb from_tag;
129
+ msg_element_cb to_tag;
130
+ msg_element_cb contact_params;
131
+ msg_has_param_cb contact_has_reg_id;
132
+ /* Header value without header params. */
133
+ header_core_value_cb header_core_value;
134
+ header_param_cb header_param;
135
+ option_tag_cb option_tag;
136
+ init_component_cb init_component;
137
+ } struct_message;
138
+
139
+ typedef struct struct_uri {
140
+ uri_element_cb full;
141
+ uri_element_cb scheme;
142
+ uri_element_cb user;
143
+ uri_element2_cb host;
144
+ uri_element_cb port;
145
+ uri_param_cb param;
146
+ uri_known_param_cb known_param;
147
+ uri_has_param_cb has_param;
148
+ uri_element_cb headers;
149
+ uri_element_cb display_name;
150
+ } struct_uri;
151
+
152
+ typedef struct sip_message_parser {
153
+ /* Parser stuf. */
154
+ int cs;
155
+ size_t nread;
156
+ char * error_start;
157
+ size_t error_len;
158
+ int error_pos;
159
+
160
+ size_t mark;
161
+ size_t hdr_field_start;
162
+ size_t hdr_field_len;
163
+ size_t hdr_value_start;
164
+ size_t hdr_value_len;
165
+ enum header_field hdr_field_name;
166
+ size_t uri_start;
167
+ /* URI parameters. */
168
+ size_t uri_param_key_start;
169
+ size_t uri_param_key_len;
170
+ size_t uri_param_value_start;
171
+ size_t uri_param_value_len;
172
+ /* Header parameters. */
173
+ size_t header_param_key_start;
174
+ size_t header_param_key_len;
175
+ size_t header_param_value_start;
176
+ size_t header_param_value_len;
177
+
178
+ /* Method which set parser->parsed as OverSIP::SIP::Request, OverSIP::SIP::Response or
179
+ * :outbound_keepalive. */
180
+ data_type_cb data_type;
181
+ /* Message method. */
182
+ enum method method;
183
+ /* Method already set. */
184
+ size_t method_set;
185
+ /* Just take top most Via data. */
186
+ size_t num_via;
187
+ /* Don't allow duplicate headers (From, To, Call-ID, CSeq, Max-Forwards and Content-Length). */
188
+ size_t num_from;
189
+ size_t num_to;
190
+ size_t num_call_id;
191
+ size_t num_cseq;
192
+ size_t num_max_forwards;
193
+ size_t num_content_length;
194
+ size_t num_contact;
195
+ int contact_is_valid;
196
+ /* If a previous Route was found then don't re-initialize the ruby @route array. */
197
+ size_t route_found;
198
+ /* Set it before parsing a desired URI. */
199
+ size_t do_uri;
200
+ /* The header (or request line) the URI belongs to. */
201
+ enum uri_owner uri_owner;
202
+ /* URI scheme type. */
203
+ enum uri_scheme uri_scheme;
204
+ /* URI display name is quoted. */
205
+ size_t uri_display_name_quoted;
206
+
207
+ header_cb header;
208
+ struct_message message;
209
+ struct_uri uri;
210
+
211
+ /* Can be set to OverSIP::SIP::Request, OverSIP::SIP::Response or :outbound_keepalive or nil. */
212
+ VALUE parsed;
213
+
214
+ /* A pointer to the Ruby OverSIP::SIP::MessageParser instance (required by data_type() in
215
+ * sip_parser_ruby.c). */
216
+ VALUE ruby_sip_parser;
217
+ } sip_message_parser;
218
+
219
+ typedef struct sip_uri_parser {
220
+ /* Parser stuf. */
221
+ size_t mark;
222
+ size_t uri_start;
223
+ /* URI parameters. */
224
+ size_t uri_param_key_start;
225
+ size_t uri_param_key_len;
226
+ size_t uri_param_value_start;
227
+ size_t uri_param_value_len;
228
+ /* URI scheme type. */
229
+ enum uri_scheme uri_scheme;
230
+ /* URI display name is quoted. */
231
+ size_t uri_display_name_quoted;
232
+
233
+ struct_uri uri;
234
+
235
+ /* Will be set to OverSIP::SIP::Uri. */
236
+ VALUE parsed;
237
+ } sip_uri_parser;
238
+
239
+
240
+
241
+ int sip_message_parser_init(sip_message_parser *parser);
242
+ int sip_message_parser_finish(sip_message_parser *parser);
243
+ size_t sip_message_parser_execute(sip_message_parser *parser, const char *buffer, size_t len, size_t off);
244
+ int sip_message_parser_has_error(sip_message_parser *parser);
245
+ int sip_message_parser_is_finished(sip_message_parser *parser);
246
+ #define sip_message_parser_nread(parser) (parser)->nread
247
+ int sip_uri_parser_execute(sip_uri_parser *parser, const char *buffer, size_t len, VALUE parsed, int allow_name_addr);
248
+
249
+
250
+ #endif