blob: 265b7f23876c73e92ab87731b5d6dba6a925ef8b [file] [log] [blame]
Tristan Matthews0a329cc2013-07-17 13:20:14 -04001/* $Id$ */
2/*
3 * Copyright (C) 2008-2011 Teluu Inc. (http://www.teluu.com)
4 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#ifndef __PJSIP_SIP_ENDPOINT_H__
21#define __PJSIP_SIP_ENDPOINT_H__
22
23/**
24 * @file sip_endpoint.h
25 * @brief SIP Endpoint.
26 */
27
28#include <pjsip/sip_transport.h>
29#include <pjsip/sip_resolve.h>
30
31/**
32 * @defgroup PJSIP_CORE_CORE At the Very Core
33 * @ingroup PJSIP_CORE
34 * @brief The very core of PJSIP.
35 */
36
37PJ_BEGIN_DECL
38
39/**
40 * @defgroup PJSIP_ENDPT Endpoint
41 * @ingroup PJSIP_CORE_CORE
42 * @brief The master, owner of all objects
43 *
44 * SIP Endpoint instance (pjsip_endpoint) can be viewed as the master/owner of
45 * all SIP objects in an application. It performs the following roles:
46 * - it manages the allocation/deallocation of memory pools for all objects.
47 * - it manages listeners and transports, and how they are used by
48 * transactions.
49 * - it receives incoming messages from transport layer and automatically
50 * dispatches them to the correct transaction (or create a new one).
51 * - it has a single instance of timer management (timer heap).
52 * - it manages modules, which is the primary means of extending the library.
53 * - it provides single polling function for all objects and distributes
54 * events.
55 * - it automatically handles incoming requests which can not be handled by
56 * existing modules (such as when incoming request has unsupported method).
57 * - and so on..
58 *
59 * Application should only instantiate one SIP endpoint instance for every
60 * process.
61 *
62 * @{
63 */
64
65
66/**
67 * Type of callback to register to pjsip_endpt_atexit().
68 */
69typedef void (*pjsip_endpt_exit_callback)(pjsip_endpoint *endpt);
70
71
72/**
73 * Create an instance of SIP endpoint from the specified pool factory.
74 * The pool factory reference then will be kept by the endpoint, so that
75 * future memory allocations by SIP components will be taken from the same
76 * pool factory.
77 *
78 * @param pf Pool factory that will be used for the lifetime of
79 * endpoint.
80 * @param name Optional name to be specified for the endpoint.
81 * If this parameter is NULL, then the name will use
82 * local host name.
83 * @param endpt Pointer to receive endpoint instance.
84 *
85 * @return PJ_SUCCESS on success.
86 */
87PJ_DECL(pj_status_t) pjsip_endpt_create(pj_pool_factory *pf,
88 const char *name,
89 pjsip_endpoint **endpt);
90
91/**
92 * Destroy endpoint instance. Application must make sure that all pending
93 * transactions have been terminated properly, because this function does not
94 * check for the presence of pending transactions.
95 *
96 * @param endpt The SIP endpoint to be destroyed.
97 */
98PJ_DECL(void) pjsip_endpt_destroy(pjsip_endpoint *endpt);
99
100/**
101 * Get endpoint name.
102 *
103 * @param endpt The SIP endpoint instance.
104 *
105 * @return Endpoint name, as was registered during endpoint
106 * creation. The string is NULL terminated.
107 */
108PJ_DECL(const pj_str_t*) pjsip_endpt_name(const pjsip_endpoint *endpt);
109
110/**
111 * Poll for events. Application must call this function periodically to ensure
112 * that all events from both transports and timer heap are handled in timely
113 * manner. This function, like all other endpoint functions, is thread safe,
114 * and application may have more than one thread concurrently calling this function.
115 *
116 * @param endpt The endpoint.
117 * @param max_timeout Maximum time to wait for events, or NULL to wait forever
118 * until event is received.
119 *
120 * @return PJ_SUCCESS on success.
121 */
122PJ_DECL(pj_status_t) pjsip_endpt_handle_events( pjsip_endpoint *endpt,
123 const pj_time_val *max_timeout);
124
125
126/**
127 * Handle events with additional info about number of events that
128 * have been handled.
129 *
130 * @param endpt The endpoint.
131 * @param max_timeout Maximum time to wait for events, or NULL to wait forever
132 * until event is received.
133 * @param count Optional argument to receive the number of events that
134 * have been handled by the function.
135 *
136 * @return PJ_SUCCESS on success.
137 */
138PJ_DECL(pj_status_t) pjsip_endpt_handle_events2(pjsip_endpoint *endpt,
139 const pj_time_val *max_timeout,
140 unsigned *count);
141/**
142 * Schedule timer to endpoint's timer heap. Application must poll the endpoint
143 * periodically (by calling #pjsip_endpt_handle_events) to ensure that the
144 * timer events are handled in timely manner. When the timeout for the timer
145 * has elapsed, the callback specified in the entry argument will be called.
146 * This function, like all other endpoint functions, is thread safe.
147 *
148 * @param endpt The endpoint.
149 * @param entry The timer entry.
150 * @param delay The relative delay of the timer.
151 * @return PJ_OK (zero) if successfull.
152 */
153#if PJ_TIMER_DEBUG
154#define pjsip_endpt_schedule_timer(ept,ent,d) \
155 pjsip_endpt_schedule_timer_dbg(ept, ent, d, \
156 __FILE__, __LINE__)
157
158PJ_DECL(pj_status_t) pjsip_endpt_schedule_timer_dbg(pjsip_endpoint *endpt,
159 pj_timer_entry *entry,
160 const pj_time_val *delay,
161 const char *src_file,
162 int src_line);
163#else
164PJ_DECL(pj_status_t) pjsip_endpt_schedule_timer( pjsip_endpoint *endpt,
165 pj_timer_entry *entry,
166 const pj_time_val *delay );
167#endif
168
169/**
170 * Cancel the previously registered timer.
171 * This function, like all other endpoint functions, is thread safe.
172 *
173 * @param endpt The endpoint.
174 * @param entry The timer entry previously registered.
175 */
176PJ_DECL(void) pjsip_endpt_cancel_timer( pjsip_endpoint *endpt,
177 pj_timer_entry *entry );
178
179/**
180 * Get the timer heap instance of the SIP endpoint.
181 *
182 * @param endpt The endpoint.
183 *
184 * @return The timer heap instance.
185 */
186PJ_DECL(pj_timer_heap_t*) pjsip_endpt_get_timer_heap(pjsip_endpoint *endpt);
187
188
189/**
190 * Register new module to the endpoint.
191 * The endpoint will then call the load and start function in the module to
192 * properly initialize the module, and assign a unique module ID for the
193 * module.
194 *
195 * @param endpt The endpoint.
196 * @param module The module to be registered.
197 *
198 * @return PJ_SUCCESS on success.
199 */
200PJ_DECL(pj_status_t) pjsip_endpt_register_module( pjsip_endpoint *endpt,
201 pjsip_module *module );
202
203/**
204 * Unregister a module from the endpoint.
205 * The endpoint will then call the stop and unload function in the module to
206 * properly shutdown the module.
207 *
208 * @param endpt The endpoint.
209 * @param module The module to be registered.
210 *
211 * @return PJ_SUCCESS on success.
212 */
213PJ_DECL(pj_status_t) pjsip_endpt_unregister_module( pjsip_endpoint *endpt,
214 pjsip_module *module );
215
216/**
217 * This describes additional parameters to pjsip_endpt_process_rx_data()
218 * function. Application MUST call pjsip_process_rdata_param_default() to
219 * initialize this structure.
220 */
221typedef struct pjsip_process_rdata_param
222{
223 /**
224 * Specify the minimum priority number of the modules that are allowed
225 * to process the message. Default is zero to allow all modules to
226 * process the message.
227 */
228 unsigned start_prio;
229
230 /**
231 * Specify the pointer of the module where processing will start.
232 * The default is NULL, meaning processing will start from the start
233 * of the module list.
234 */
235 void *start_mod;
236
237 /**
238 * Set to N, then processing will start at Nth module after start
239 * module (where start module can be an explicit module as specified
240 * by \a start_mod or the start of module list when \a start_mod is
241 * NULL). For example, if set to 1, then processing will start from
242 * the next module after start module. Default is zero.
243 */
244 unsigned idx_after_start;
245
246 /**
247 * Print nothing to log. Default is PJ_FALSE.
248 */
249 pj_bool_t silent;
250
251} pjsip_process_rdata_param;
252
253/**
254 * Initialize with default.
255 *
256 * @param p The param.
257 */
258PJ_DECL(void) pjsip_process_rdata_param_default(pjsip_process_rdata_param *p);
259
260/**
261 * Manually distribute the specified pjsip_rx_data to registered modules.
262 * Normally application does not need to call this function because received
263 * messages will be given to endpoint automatically by transports.
264 *
265 * Application can use this function when it has postponed the processing of
266 * an incoming message, for example to perform long operations such as
267 * database operation or to consult other servers to decide what to do with
268 * the message. In this case, application clones the original rdata, return
269 * from the callback, and perform the long operation. Upon completing the
270 * long operation, it resumes pjsip's module processing by calling this
271 * function, and then free the cloned rdata.
272 *
273 * @param endpt The endpoint instance.
274 * @param rdata The rdata to be distributed.
275 * @param p Optional pointer to param to specify from which module
276 * the processing should start.
277 * @param p_handled Optional pointer to receive last return value of
278 * module's \a on_rx_request() or \a on_rx_response()
279 * callback.
280 *
281 * @return PJ_SUCCESS on success.
282 */
283PJ_DECL(pj_status_t) pjsip_endpt_process_rx_data(pjsip_endpoint *endpt,
284 pjsip_rx_data *rdata,
285 pjsip_process_rdata_param *p,
286 pj_bool_t *p_handled);
287
288/**
289 * Create pool from the endpoint. All SIP components should allocate their
290 * memory pool by calling this function, to make sure that the pools are
291 * allocated from the same pool factory. This function, like all other endpoint
292 * functions, is thread safe.
293 *
294 * @param endpt The SIP endpoint.
295 * @param pool_name Name to be assigned to the pool.
296 * @param initial The initial size of the pool.
297 * @param increment The resize size.
298 * @return Memory pool, or NULL on failure.
299 *
300 * @see pj_pool_create
301 */
302PJ_DECL(pj_pool_t*) pjsip_endpt_create_pool( pjsip_endpoint *endpt,
303 const char *pool_name,
304 pj_size_t initial,
305 pj_size_t increment );
306
307/**
308 * Return back pool to endpoint to be released back to the pool factory.
309 * This function, like all other endpoint functions, is thread safe.
310 *
311 * @param endpt The endpoint.
312 * @param pool The pool to be destroyed.
313 */
314PJ_DECL(void) pjsip_endpt_release_pool( pjsip_endpoint *endpt,
315 pj_pool_t *pool );
316
317/**
318 * Find transaction in endpoint's transaction table by the transaction's key.
319 * This function normally is only used by modules. The key for a transaction
320 * can be created by calling #pjsip_tsx_create_key.
321 *
322 * @param endpt The endpoint instance.
323 * @param key Transaction key, as created with #pjsip_tsx_create_key.
324 *
325 * @return The transaction, or NULL if it's not found.
326 */
327PJ_DECL(pjsip_transaction*) pjsip_endpt_find_tsx( pjsip_endpoint *endpt,
328 const pj_str_t *key );
329
330/**
331 * Register the transaction to the endpoint's transaction table.
332 * This function should only be used internally by the stack.
333 *
334 * @param endpt The SIP endpoint.
335 * @param tsx The transaction.
336 */
337PJ_DECL(void) pjsip_endpt_register_tsx( pjsip_endpoint *endpt,
338 pjsip_transaction *tsx);
339
340/**
341 * Forcefull destroy the transaction. This function should only be used
342 * internally by the stack.
343 *
344 * @param endpt The endpoint.
345 * @param tsx The transaction to destroy.
346 */
347PJ_DECL(void) pjsip_endpt_destroy_tsx( pjsip_endpoint *endpt,
348 pjsip_transaction *tsx);
349
350/**
351 * Create a new transmit data buffer.
352 * This function, like all other endpoint functions, is thread safe.
353 *
354 * @param endpt The endpoint.
355 * @param p_tdata Pointer to receive transmit data buffer.
356 *
357 * @return PJ_SUCCESS or the appropriate error code.
358 */
359PJ_DECL(pj_status_t) pjsip_endpt_create_tdata( pjsip_endpoint *endpt,
360 pjsip_tx_data **p_tdata);
361
362/**
363 * Create the DNS resolver instance. Application creates the DNS
364 * resolver instance, set the nameserver to be used by the DNS
365 * resolver, then set the DNS resolver to be used by the endpoint
366 * by calling #pjsip_endpt_set_resolver().
367 *
368 * @param endpt The SIP endpoint instance.
369 * @param p_resv Pointer to receive the DNS resolver instance.
370 *
371 * @return PJ_SUCCESS on success, or the appropriate error
372 * code.
373 */
374PJ_DECL(pj_status_t) pjsip_endpt_create_resolver(pjsip_endpoint *endpt,
375 pj_dns_resolver **p_resv);
376
377/**
378 * Set DNS resolver to be used by the SIP resolver. Application can set
379 * the resolver instance to NULL to disable DNS resolution (perhaps
380 * temporarily). When DNS resolver is disabled, the endpoint will resolve
381 * hostnames with the normal pj_gethostbyname() function.
382 *
383 * @param endpt The SIP endpoint instance.
384 * @param resv The resolver instance to be used by the SIP
385 * endpoint.
386 *
387 * @return PJ_SUCCESS on success, or the appropriate error
388 * code.
389 */
390PJ_DECL(pj_status_t) pjsip_endpt_set_resolver(pjsip_endpoint *endpt,
391 pj_dns_resolver *resv);
392
393/**
394 * Get the DNS resolver being used by the SIP resolver.
395 *
396 * @param endpt The SIP endpoint instance.
397 *
398 * @return The DNS resolver instance currently being used
399 * by the SIP endpoint.
400 */
401PJ_DECL(pj_dns_resolver*) pjsip_endpt_get_resolver(pjsip_endpoint *endpt);
402
403/**
404 * Asynchronously resolve a SIP target host or domain according to rule
405 * specified in RFC 3263 (Locating SIP Servers). When the resolving operation
406 * has completed, the callback will be called.
407 *
408 * @param endpt The endpoint instance.
409 * @param pool The pool to allocate resolver job.
410 * @param target The target specification to be resolved.
411 * @param token A user defined token to be passed back to callback function.
412 * @param cb The callback function.
413 */
414PJ_DECL(void) pjsip_endpt_resolve( pjsip_endpoint *endpt,
415 pj_pool_t *pool,
416 pjsip_host_info *target,
417 void *token,
418 pjsip_resolver_callback *cb);
419
420/**
421 * Get transport manager instance.
422 *
423 * @param endpt The endpoint.
424 *
425 * @return Transport manager instance.
426 */
427PJ_DECL(pjsip_tpmgr*) pjsip_endpt_get_tpmgr(pjsip_endpoint *endpt);
428
429/**
430 * Get ioqueue instance.
431 *
432 * @param endpt The endpoint.
433 *
434 * @return The ioqueue.
435 */
436PJ_DECL(pj_ioqueue_t*) pjsip_endpt_get_ioqueue(pjsip_endpoint *endpt);
437
438/**
439 * Find a SIP transport suitable for sending SIP message to the specified
440 * address. If transport selector ("sel") is set, then the function will
441 * check if the transport selected is suitable to send requests to the
442 * specified address.
443 *
444 * @see pjsip_tpmgr_acquire_transport
445 *
446 * @param endpt The SIP endpoint instance.
447 * @param type The type of transport to be acquired.
448 * @param remote The remote address to send message to.
449 * @param addr_len Length of the remote address.
450 * @param sel Optional pointer to transport selector instance which is
451 * used to find explicit transport, if required.
452 * @param p_tp Pointer to receive the transport instance, if one is found.
453 *
454 * @return PJ_SUCCESS on success, or the appropriate error code.
455 */
456PJ_DECL(pj_status_t)
457pjsip_endpt_acquire_transport( pjsip_endpoint *endpt,
458 pjsip_transport_type_e type,
459 const pj_sockaddr_t *remote,
460 int addr_len,
461 const pjsip_tpselector *sel,
462 pjsip_transport **p_tp);
463
464
465/**
466 * Find a SIP transport suitable for sending SIP message to the specified
467 * address by also considering the outgoing SIP message data. If transport
468 * selector ("sel") is set, then the function will check if the transport
469 * selected is suitable to send requests to the specified address.
470 *
471 * @see pjsip_tpmgr_acquire_transport
472 *
473 * @param endpt The SIP endpoint instance.
474 * @param type The type of transport to be acquired.
475 * @param remote The remote address to send message to.
476 * @param addr_len Length of the remote address.
477 * @param sel Optional pointer to transport selector instance which is
478 * used to find explicit transport, if required.
479 * @param tdata Optional pointer to SIP message data to be sent.
480 * @param p_tp Pointer to receive the transport instance, if one is found.
481 *
482 * @return PJ_SUCCESS on success, or the appropriate error code.
483 */
484PJ_DECL(pj_status_t)
485pjsip_endpt_acquire_transport2(pjsip_endpoint *endpt,
486 pjsip_transport_type_e type,
487 const pj_sockaddr_t *remote,
488 int addr_len,
489 const pjsip_tpselector *sel,
490 pjsip_tx_data *tdata,
491 pjsip_transport **p_tp);
492
493
494/*****************************************************************************
495 *
496 * Capabilities Management
497 *
498 * Modules may implement new capabilities to the stack. These capabilities
499 * are indicated by the appropriate SIP header fields, such as Accept,
500 * Accept-Encoding, Accept-Language, Allow, Supported, etc.
501 *
502 * When a module provides new capabilities to the stack, it registers these
503 * capabilities to the endpoint by supplying new tags (strings) to the
504 * appropriate header fields. Application (or other modules) can then query
505 * these header fields to get the list of supported capabilities, and may
506 * include these headers in the outgoing message.
507 *****************************************************************************
508 */
509
510/**
511 * Get the value of the specified capability header field.
512 *
513 * @param endpt The endpoint.
514 * @param htype The header type to be retrieved, which value may be:
515 * - PJSIP_H_ACCEPT
516 * - PJSIP_H_ALLOW
517 * - PJSIP_H_SUPPORTED
518 * @param hname If htype specifies PJSIP_H_OTHER, then the header name
519 * must be supplied in this argument. Otherwise the value
520 * must be set to NULL.
521 *
522 * @return The appropriate header, or NULL if the header is not
523 * available.
524 */
525PJ_DECL(const pjsip_hdr*) pjsip_endpt_get_capability( pjsip_endpoint *endpt,
526 int htype,
527 const pj_str_t *hname);
528
529
530/**
531 * Check if we have the specified capability.
532 *
533 * @param endpt The endpoint.
534 * @param htype The header type to be retrieved, which value may be:
535 * - PJSIP_H_ACCEPT
536 * - PJSIP_H_ALLOW
537 * - PJSIP_H_SUPPORTED
538 * @param hname If htype specifies PJSIP_H_OTHER, then the header name
539 * must be supplied in this argument. Otherwise the value
540 * must be set to NULL.
541 * @param token The capability token to check. For example, if \a htype
542 * is PJSIP_H_ALLOW, then \a token specifies the method
543 * names; if \a htype is PJSIP_H_SUPPORTED, then \a token
544 * specifies the extension names such as "100rel".
545 *
546 * @return PJ_TRUE if the specified capability is supported,
547 * otherwise PJ_FALSE..
548 */
549PJ_DECL(pj_bool_t) pjsip_endpt_has_capability( pjsip_endpoint *endpt,
550 int htype,
551 const pj_str_t *hname,
552 const pj_str_t *token);
553
554
555/**
556 * Add or register new capabilities as indicated by the tags to the
557 * appropriate header fields in the endpoint.
558 *
559 * @param endpt The endpoint.
560 * @param mod The module which registers the capability.
561 * @param htype The header type to be set, which value may be:
562 * - PJSIP_H_ACCEPT
563 * - PJSIP_H_ALLOW
564 * - PJSIP_H_SUPPORTED
565 * @param hname If htype specifies PJSIP_H_OTHER, then the header name
566 * must be supplied in this argument. Otherwise the value
567 * must be set to NULL.
568 * @param count The number of tags in the array.
569 * @param tags Array of tags describing the capabilities or extensions
570 * to be added to the appropriate header.
571 *
572 * @return PJ_SUCCESS on success.
573 */
574PJ_DECL(pj_status_t) pjsip_endpt_add_capability( pjsip_endpoint *endpt,
575 pjsip_module *mod,
576 int htype,
577 const pj_str_t *hname,
578 unsigned count,
579 const pj_str_t tags[]);
580
581/**
582 * Get list of additional headers to be put in outgoing request message.
583 * Currently only Max-Forwards are defined.
584 *
585 * @param e The endpoint.
586 *
587 * @return List of headers.
588 */
589PJ_DECL(const pjsip_hdr*) pjsip_endpt_get_request_headers(pjsip_endpoint *e);
590
591
592/**
593 * Dump endpoint status to the log. This will print the status to the log
594 * with log level 3.
595 *
596 * @param endpt The endpoint.
597 * @param detail If non zero, then it will dump a detailed output.
598 * BEWARE that this option may crash the system because
599 * it tries to access all memory pools.
600 */
601PJ_DECL(void) pjsip_endpt_dump( pjsip_endpoint *endpt, pj_bool_t detail );
602
603
604/**
605 * Register cleanup function to be called by SIP endpoint when
606 * #pjsip_endpt_destroy() is called. Note that application should not
607 * use or access any endpoint resource (such as pool, ioqueue, timer heap)
608 * from within the callback as such resource may have been released when
609 * the callback function is invoked.
610 *
611 * @param endpt The SIP endpoint.
612 * @param func The function to be registered.
613 *
614 * @return PJ_SUCCESS on success.
615 */
616PJ_DECL(pj_status_t) pjsip_endpt_atexit(pjsip_endpoint *endpt,
617 pjsip_endpt_exit_callback func);
618
619
620/**
621 * @}
622 */
623
624
625/**
626 * Log an error.
627 */
628PJ_DECL(void) pjsip_endpt_log_error( pjsip_endpoint *endpt,
629 const char *sender,
630 pj_status_t error_code,
631 const char *format,
632 ... );
633
634#define PJSIP_ENDPT_LOG_ERROR(expr) \
635 pjsip_endpt_log_error expr
636
637#define PJSIP_ENDPT_TRACE(tracing,expr) \
638 do { \
639 if ((tracing)) \
640 PJ_LOG(4,expr); \
641 } while (0)
642
643/*
644 * Internal functions.
645 */
646/*
647 * Receive transaction events from transactions and put in the event queue
648 * to be processed later.
649 */
650void pjsip_endpt_send_tsx_event( pjsip_endpoint *endpt, pjsip_event *evt );
651
652PJ_END_DECL
653
654#endif /* __PJSIP_SIP_ENDPOINT_H__ */
655