![]() |
Home page |
Mailing list |
Docs
Asterisk developer's documentation :: Codename Pineapple
sip3core.h
Go to the documentation of this file.
00001 /*------------------------------------------------------------------------------------ 00002 00003 Old list of all functions in chan_sip3.c - functions that needs to be moved, or 00004 encapsulated so they are not needed in a common namespace 00005 00006 ------------------------------------------------------------------------------------*/ 00007 00008 /*--- Transmitting responses and requests */ 00009 extern int __transmit_response(struct sip_pvt *p, const char *msg, const struct sip_request *req, enum xmittype reliable); 00010 extern int transmit_sip_request(struct sip_pvt *p, struct sip_request *req); 00011 extern int transmit_response(struct sip_pvt *p, const char *msg, const struct sip_request *req); 00012 extern int transmit_response_reliable(struct sip_pvt *p, const char *msg, const struct sip_request *req); 00013 extern int transmit_response_with_date(struct sip_pvt *p, const char *msg, const struct sip_request *req); 00014 extern int transmit_response_with_sdp(struct sip_pvt *p, const char *msg, const struct sip_request *req, enum xmittype reliable); 00015 extern int transmit_response_with_unsupported(struct sip_pvt *p, const char *msg, const struct sip_request *req, const char *unsupported); 00016 extern int transmit_response_with_auth(struct sip_pvt *p, const char *msg, const struct sip_request *req, const char *rand, enum xmittype reliable, const char *header, int stale); 00017 extern int transmit_response_with_allow(struct sip_pvt *p, const char *msg, const struct sip_request *req, enum xmittype reliable); 00018 extern void transmit_fake_auth_response(struct sip_pvt *p, struct sip_request *req, int reliable); 00019 extern int transmit_request(struct sip_pvt *p, int sipmethod, int inc, enum xmittype reliable, int newbranch); 00020 extern int transmit_request_with_auth(struct sip_pvt *p, int sipmethod, int seqno, enum xmittype reliable, int newbranch); 00021 extern int transmit_invite(struct sip_pvt *p, int sipmethod, int sdp, int init); 00022 extern int transmit_reinvite_with_sdp(struct sip_pvt *p); 00023 extern int transmit_info_with_digit(struct sip_pvt *p, const char digit); 00024 extern int transmit_info_with_vidupdate(struct sip_pvt *p); 00025 extern int transmit_message_with_text(struct sip_pvt *p, const char *text); 00026 extern int transmit_refer(struct sip_pvt *p, const char *dest); 00027 extern int transmit_notify_with_mwi(struct sip_pvt *p, int newmsgs, int oldmsgs, char *vmexten); 00028 extern int transmit_notify_with_sipfrag(struct sip_pvt *p, int cseq, char *message, int terminate); 00029 extern int transmit_state_notify(struct sip_pvt *p, int state, int full); 00030 extern int transmit_register(struct sip_registry *r, int sipmethod, const char *auth, const char *authheader); 00031 extern int send_request(struct sip_pvt *p, struct sip_request *req, enum xmittype reliable, int seqno); 00032 extern void copy_request(struct sip_request *dst, const struct sip_request *src); 00033 extern void receive_message(struct sip_pvt *p, struct sip_request *req); 00034 extern void parse_moved_contact(struct sip_pvt *p, struct sip_request *req); 00035 extern int sip_send_mwi_to_peer(struct sip_peer *peer); 00036 extern int does_peer_need_mwi(struct sip_peer *peer); 00037 00038 /*--- Dialog management */ 00039 extern struct sip_pvt *sip_alloc(ast_string_field callid, struct sockaddr_in *sin, 00040 int useglobal_nat, const int intended_method); 00041 extern int __sip_autodestruct(void *data); 00042 extern void sip_scheddestroy(struct sip_pvt *p, int ms); 00043 extern void sip_cancel_destroy(struct sip_pvt *p); 00044 extern void sip_destroy(struct sip_pvt *p); 00045 extern void __sip_destroy(struct sip_pvt *p, int lockowner); 00046 extern void __sip_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod, int reset); 00047 extern void __sip_pretend_ack(struct sip_pvt *p); 00048 extern int __sip_semi_ack(struct sip_pvt *p, int seqno, int resp, int sipmethod); 00049 extern int auto_congest(void *nothing); 00050 extern int update_call_counter(struct sip_pvt *fup, int event); 00051 extern int hangup_sip2cause(int cause); 00052 extern const char *hangup_cause2sip(int cause); 00053 extern struct sip_pvt *find_call(struct sip_request *req, struct sockaddr_in *sin, const int intended_method); 00054 extern void free_old_route(struct sip_route *route); 00055 extern void list_route(struct sip_route *route); 00056 extern void build_route(struct sip_pvt *p, struct sip_request *req, int backwards); 00057 extern enum check_auth_result register_verify(struct sip_pvt *p, struct sockaddr_in *sin, 00058 struct sip_request *req, char *uri); 00059 extern struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *totag, const char *fromtag); 00060 extern void check_pendings(struct sip_pvt *p); 00061 extern void *sip_park_thread(void *stuff); 00062 extern int sip_park(struct ast_channel *chan1, struct ast_channel *chan2, struct sip_request *req, int seqno); 00063 extern int sip_sipredirect(struct sip_pvt *p, const char *dest); 00064 00065 /*--- Codec handling / SDP */ 00066 extern void try_suggested_sip_codec(struct sip_pvt *p); 00067 extern int find_sdp(struct sip_request *req); 00068 extern void add_codec_to_sdp(const struct sip_pvt *p, int codec, int sample_rate, 00069 char **m_buf, size_t *m_size, char **a_buf, size_t *a_size, 00070 int debug); 00071 extern void add_noncodec_to_sdp(const struct sip_pvt *p, int format, int sample_rate, 00072 char **m_buf, size_t *m_size, char **a_buf, size_t *a_size, 00073 int debug); 00074 extern int add_sdp(struct sip_request *resp, struct sip_pvt *p); 00075 00076 /*--- Authentication stuff */ 00077 extern int clear_realm_authentication(struct sip_auth *authlist); /* Clear realm authentication list (at reload) */ 00078 extern struct sip_auth *add_realm_authentication(struct sip_auth *authlist, char *configuration, int lineno); /* Add realm authentication in list */ 00079 extern struct sip_auth *find_realm_authentication(struct sip_auth *authlist, const char *realm); /* Find authentication for a specific realm */ 00080 extern enum check_auth_result check_auth(struct sip_pvt *p, struct sip_request *req, const char *username, 00081 const char *secret, const char *md5secret, int sipmethod, 00082 char *uri, enum xmittype reliable, int ignore); 00083 extern enum check_auth_result check_user_full(struct sip_pvt *p, struct sip_request *req, 00084 int sipmethod, char *uri, enum xmittype reliable, 00085 struct sockaddr_in *sin, struct sip_peer **authpeer); 00086 extern int check_user(struct sip_pvt *p, struct sip_request *req, int sipmethod, char *uri, enum xmittype reliable, struct sockaddr_in *sin); 00087 extern int build_reply_digest(struct sip_pvt *p, int method, char* digest, int digest_len); 00088 00089 /*--- Domain handling */ 00090 extern int check_sip_domain(const char *domain, char *context, size_t len); /* Check if domain is one of our local domains */ 00091 extern int add_sip_domain(const char *domain, const enum domain_mode mode, const char *context); 00092 extern void clear_sip_domains(void); 00093 00094 /*--- SIP realm authentication */ 00095 extern struct sip_auth *add_realm_authentication(struct sip_auth *authlist, char *configuration, int lineno); 00096 extern int clear_realm_authentication(struct sip_auth *authlist); 00097 extern struct sip_auth *find_realm_authentication(struct sip_auth *authlist, const char *realm); 00098 00099 /*--- Misc functions */ 00100 extern int sip_do_reload(enum channelreloadreason reason); 00101 extern int expire_register(void *data); 00102 extern int sip_sipredirect(struct sip_pvt *p, const char *dest); 00103 extern void *do_monitor(void *data); 00104 extern int restart_monitor(void); 00105 extern int sip_send_mwi_to_peer(struct sip_peer *peer); 00106 extern void sip_destroy(struct sip_pvt *p); 00107 extern int sip_addrcmp(char *name, struct sockaddr_in *sin); /* Support for peer matching */ 00108 extern int sip_refer_allocate(struct sip_pvt *p); 00109 extern void ast_quiet_chan(struct ast_channel *chan); 00110 extern int attempt_transfer(struct sip_dual *transferer, struct sip_dual *target); 00111 00112 /*--- Device monitoring and Device/extension state handling */ 00113 extern int cb_extensionstate(char *context, char* exten, int state, void *data); 00114 extern int sip_devicestate(void *data); 00115 extern int sip_poke_noanswer(void *data); 00116 extern int sip_poke_peer(struct sip_peer *peer); 00117 extern void sip_poke_all_peers(void); 00118 extern void sip_peer_hold(struct sip_pvt *p, int hold); 00119 00120 /*--- Applications, functions, CLI and manager command helpers */ 00121 extern const char *sip_nat_mode(const struct sip_pvt *p); 00122 extern int sip_show_inuse(int fd, int argc, char *argv[]); 00123 extern char *transfermode2str(enum transfermodes mode) attribute_const; 00124 extern char *nat2str(int nat) attribute_const; 00125 extern int peer_status(struct sip_peer *peer, char *status, int statuslen); 00126 extern int sip_show_users(int fd, int argc, char *argv[]); 00127 extern int _sip_show_peers(int fd, int *total, struct mansession *s, struct message *m, int argc, char *argv[]); 00128 extern int manager_sip_show_peers( struct mansession *s, struct message *m ); 00129 extern int sip_show_peers(int fd, int argc, char *argv[]); 00130 extern int sip_show_objects(int fd, int argc, char *argv[]); 00131 extern void print_group(int fd, ast_group_t group, int crlf); 00132 extern const char *dtmfmode2str(int mode) attribute_const; 00133 extern const char *insecure2str(int port, int invite) attribute_const; 00134 extern void cleanup_stale_contexts(char *new, char *old); 00135 extern void print_codec_to_cli(int fd, struct ast_codec_pref *pref); 00136 extern const char *domain_mode_to_text(const enum domain_mode mode); 00137 extern int sip_show_domains(int fd, int argc, char *argv[]); 00138 extern int _sip_show_peer(int type, int fd, struct mansession *s, struct message *m, int argc, char *argv[]); 00139 extern int manager_sip_show_peer( struct mansession *s, struct message *m); 00140 extern int sip_show_peer(int fd, int argc, char *argv[]); 00141 extern int _sip_show_peer(int type, int fd, struct mansession *s, struct message *m, int argc, char *argv[]); 00142 extern int sip_show_user(int fd, int argc, char *argv[]); 00143 extern int sip_show_registry(int fd, int argc, char *argv[]); 00144 extern int sip_show_settings(int fd, int argc, char *argv[]); 00145 extern int __sip_show_channels(int fd, int argc, char *argv[], int subscriptions); 00146 extern int sip_show_channels(int fd, int argc, char *argv[]); 00147 extern int sip_show_subscriptions(int fd, int argc, char *argv[]); 00148 extern int __sip_show_channels(int fd, int argc, char *argv[], int subscriptions); 00149 extern char *complete_sipch(const char *line, const char *word, int pos, int state); 00150 extern char *complete_sip_peer(const char *word, int state, int flags2); 00151 extern char *complete_sip_show_peer(const char *line, const char *word, int pos, int state); 00152 extern char *complete_sip_debug_peer(const char *line, const char *word, int pos, int state); 00153 extern char *complete_sip_user(const char *word, int state, int flags2); 00154 extern char *complete_sip_show_user(const char *line, const char *word, int pos, int state); 00155 extern char *complete_sipnotify(const char *line, const char *word, int pos, int state); 00156 extern char *complete_sip_prune_realtime_peer(const char *line, const char *word, int pos, int state); 00157 extern char *complete_sip_prune_realtime_user(const char *line, const char *word, int pos, int state); 00158 extern int sip_show_channel(int fd, int argc, char *argv[]); 00159 extern int sip_show_history(int fd, int argc, char *argv[]); 00160 extern int sip_do_debug_ip(int fd, int argc, char *argv[]); 00161 extern int sip_do_debug_peer(int fd, int argc, char *argv[]); 00162 extern int sip_do_debug(int fd, int argc, char *argv[]); 00163 extern int sip_no_debug(int fd, int argc, char *argv[]); 00164 extern int sip_notify(int fd, int argc, char *argv[]); 00165 extern int sip_do_history(int fd, int argc, char *argv[]); 00166 extern int sip_no_history(int fd, int argc, char *argv[]); 00167 extern int func_header_read(struct ast_channel *chan, char *function, char *data, char *buf, size_t len); 00168 extern int func_check_sipdomain(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len); 00169 extern int function_sippeer(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len); 00170 extern int function_sipchaninfo_read(struct ast_channel *chan, char *cmd, char *data, char *buf, size_t len); 00171 extern int sip_dtmfmode(struct ast_channel *chan, void *data); 00172 extern int sip_addheader(struct ast_channel *chan, void *data); 00173 extern int sip_do_reload(enum channelreloadreason reason); 00174 extern int sip_reload(int fd, int argc, char *argv[]); 00175 00176 /*--- Debugging 00177 Functions for enabling debug per IP or fully, or enabling history logging for 00178 a SIP dialog 00179 */ 00180 extern void sip_dump_history(struct sip_pvt *dialog); /* Dump history to LOG_DEBUG at end of dialog, before destroying data */ 00181 extern inline int sip_debug_test_addr(const struct sockaddr_in *addr); 00182 extern inline int sip_debug_test_pvt(struct sip_pvt *p); 00183 extern void append_history_full(struct sip_pvt *p, const char *fmt, ...); 00184 extern void sip_dump_history(struct sip_pvt *dialog); 00185 00186 /*--- Device object handling */ 00187 extern struct sip_peer *temp_peer(const char *name); 00188 extern int update_call_counter(struct sip_pvt *fup, int event); 00189 extern void sip_destroy_device(struct sip_peer *peer); 00190 extern int sip_poke_peer(struct sip_peer *peer); 00191 extern void set_device_defaults(struct sip_peer *peer); 00192 extern struct sip_peer *temp_peer(const char *name); 00193 extern void register_peer_exten(struct sip_peer *peer, int onoff); 00194 extern struct sip_peer *find_peer(const char *peer, struct sockaddr_in *sin, int realtime); 00195 extern struct sip_peer *find_user(const char *name, int realtime); 00196 extern int sip_poke_peer_s(void *data); 00197 extern enum parse_register_result parse_register_contact(struct sip_pvt *pvt, struct sip_peer *p, struct sip_request *req); 00198 extern int expire_register(void *data); 00199 extern void reg_source_db(struct sip_peer *peer); 00200 extern void destroy_association(struct sip_peer *peer); 00201 extern int handle_common_options(struct ast_flags *flags, struct ast_flags *mask, struct ast_variable *v); 00202 00203 /* Realtime device support */ 00204 extern void realtime_update_peer(const char *peername, struct sockaddr_in *sin, const char *username, const char *fullcontact, int expirey); 00205 extern void update_peer(struct sip_peer *p, int expiry); 00206 extern int sip_prune_realtime(int fd, int argc, char *argv[]); 00207 00208 /*--- Internal UA client handling (outbound registrations) */ 00209 extern int ast_sip_ouraddrfor(struct in_addr *them, struct in_addr *us); 00210 extern void sip_registry_destroy(struct sip_registry *reg); 00211 extern int sip_register(char *value, int lineno); 00212 extern char *regstate2str(enum sipregistrystate regstate) attribute_const; 00213 extern int sip_reregister(void *data); 00214 extern int __sip_do_register(struct sip_registry *r); 00215 extern int sip_reg_timeout(void *data); 00216 extern void sip_send_all_registers(void); 00217 00218 /*--- Parsing SIP requests and responses */ 00219 extern void append_date(struct sip_request *req); /* Append date to SIP packet */ 00220 extern int determine_firstline_parts(struct sip_request *req); 00221 extern const char *gettag(const struct sip_request *req, const char *header, char *tagbuf, int tagbufsize); 00222 extern int find_sip_method(const char *msg); 00223 extern unsigned int parse_sip_options(struct sip_pvt *pvt, const char *supported); 00224 extern void parse_request(struct sip_request *req); 00225 extern const char *get_header(const struct sip_request *req, const char *name); 00226 extern int method_match(enum sipmethod id, const char *name); 00227 extern void parse_copy(struct sip_request *dst, const struct sip_request *src); 00228 static void add_blank(struct sip_request *req); 00229 extern char *get_in_brackets(char *tmp); 00230 extern const char *find_alias(const char *name, const char *_default); 00231 extern const char *__get_header(const struct sip_request *req, const char *name, int *start); 00232 extern const char *get_header(const struct sip_request *req, const char *name); 00233 extern int lws2sws(char *msgbuf, int len); 00234 extern void extract_uri(struct sip_pvt *p, struct sip_request *req); 00235 extern int get_refer_info(struct sip_pvt *transferer, struct sip_request *outgoing_req); 00236 extern int get_also_info(struct sip_pvt *p, struct sip_request *oreq); 00237 extern int parse_ok_contact(struct sip_pvt *pvt, struct sip_request *req); 00238 extern int set_address_from_contact(struct sip_pvt *pvt); 00239 extern void check_via(struct sip_pvt *p, struct sip_request *req); 00240 extern char *get_calleridname(const char *input, char *output, size_t outputsize); 00241 extern int get_rpid_num(const char *input, char *output, int maxlen); 00242 extern int get_rdnis(struct sip_pvt *p, struct sip_request *oreq); 00243 extern int get_destination(struct sip_pvt *p, struct sip_request *oreq); 00244 extern int get_msg_text(char *buf, int len, struct sip_request *req); 00245 extern const char *gettag(const struct sip_request *req, const char *header, char *tagbuf, int tagbufsize); 00246 extern void free_old_route(struct sip_route *route); 00247 00248 /*--- Constructing requests and responses */ 00249 extern void initialize_initreq(struct sip_pvt *p, struct sip_request *req); 00250 extern int init_req(struct sip_request *req, int sipmethod, const char *recip); 00251 extern int reqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod, int seqno, int newbranch); 00252 extern void initreqprep(struct sip_request *req, struct sip_pvt *p, int sipmethod); 00253 extern int init_resp(struct sip_request *resp, const char *msg); 00254 extern int respprep(struct sip_request *resp, struct sip_pvt *p, const char *msg, const struct sip_request *req); 00255 extern const struct sockaddr_in *sip_real_dst(const struct sip_pvt *p); 00256 extern void build_via(struct sip_pvt *p); 00257 extern int create_addr_from_peer(struct sip_pvt *r, struct sip_peer *peer); 00258 extern int create_addr(struct sip_pvt *dialog, const char *opeer); 00259 extern char *generate_random_string(char *buf, size_t size); 00260 extern void build_callid_pvt(struct sip_pvt *pvt); 00261 extern void build_callid_registry(struct sip_registry *reg, struct in_addr ourip, const char *fromdomain); 00262 extern void make_our_tag(char *tagbuf, size_t len); 00263 extern int add_header(struct sip_request *req, const char *var, const char *value); 00264 extern int add_header_contentLength(struct sip_request *req, int len); 00265 extern int add_line(struct sip_request *req, const char *line); 00266 extern int add_text(struct sip_request *req, const char *text); 00267 extern int add_digit(struct sip_request *req, char digit); 00268 extern int add_vidupdate(struct sip_request *req); 00269 extern void add_route(struct sip_request *req, struct sip_route *route); 00270 extern int copy_header(struct sip_request *req, const struct sip_request *orig, const char *field); 00271 extern int copy_all_header(struct sip_request *req, const struct sip_request *orig, const char *field); 00272 extern int copy_via_headers(struct sip_pvt *p, struct sip_request *req, const struct sip_request *orig, const char *field); 00273 extern void set_destination(struct sip_pvt *p, char *uri); 00274 extern void append_date(struct sip_request *req); 00275 extern void build_contact(struct sip_pvt *p); 00276 extern void build_rpid(struct sip_pvt *p); 00277 00278 /*------Request handling functions */ 00279 extern int handle_request(struct sip_pvt *p, struct sip_request *req, struct sockaddr_in *sin, int *recount, int *nounlock); 00280 extern int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int debug, int seqno, struct sockaddr_in *sin, int *recount, char *e); 00281 extern int handle_request_refer(struct sip_pvt *p, struct sip_request *req, int debug, int ignore, int seqno, int *nounlock); 00282 extern int handle_request_bye(struct sip_pvt *p, struct sip_request *req); 00283 extern int handle_request_register(struct sip_pvt *p, struct sip_request *req, struct sockaddr_in *sin, char *e); 00284 extern int handle_request_cancel(struct sip_pvt *p, struct sip_request *req); 00285 extern int handle_request_message(struct sip_pvt *p, struct sip_request *req); 00286 extern int handle_request_subscribe(struct sip_pvt *p, struct sip_request *req, struct sockaddr_in *sin, int seqno, char *e); 00287 extern void handle_request_info(struct sip_pvt *p, struct sip_request *req); 00288 extern int handle_request_options(struct sip_pvt *p, struct sip_request *req); 00289 extern int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, int debug, int ignore, int seqno, struct sockaddr_in *sin); 00290 extern int handle_request_notify(struct sip_pvt *p, struct sip_request *req, struct sockaddr_in *sin, int seqno, char *e); 00291 extern int handle_invite_replaces(struct sip_pvt *p, struct sip_request *req, int debug, int ignore, int seqno, struct sockaddr_in *sin); 00292 extern int local_attended_transfer(struct sip_pvt *transferer, struct sip_dual *current, struct sip_request *req, int seqno); 00293 00294 /*------Response handling functions */ 00295 extern void handle_response_invite(struct sip_pvt *p, int resp, char *rest, struct sip_request *req, int seqno); 00296 extern void handle_response_refer(struct sip_pvt *p, int resp, char *rest, struct sip_request *req, int seqno); 00297 extern int handle_response_peerpoke(struct sip_pvt *p, int resp, struct sip_request *req); 00298 extern int handle_response_register(struct sip_pvt *p, int resp, char *rest, struct sip_request *req, int seqno); 00299 extern void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_request *req, int seqno); 00300 00301 /*----- RTP interface functions */ 00302 extern int sip_set_rtp_peer(struct ast_channel *chan, struct ast_rtp *rtp, struct ast_rtp *vrtp, int codecs, int nat_active); 00303 extern int sip_get_codec(struct ast_channel *chan); 00304 extern struct ast_frame *sip_rtp_read(struct ast_channel *ast, struct sip_pvt *p, int *faxdetect); 00305 00306 /*------ T38 Support --------- */ 00307 extern int sip_handle_t38_reinvite(struct ast_channel *chan, struct sip_pvt *pvt, int reinvite); /*!< T38 negotiation helper function */ 00308 extern int transmit_response_with_t38_sdp(struct sip_pvt *p, char *msg, struct sip_request *req, int retrans); 00309 extern int transmit_reinvite_with_t38_sdp(struct sip_pvt *p); 00310 extern struct ast_udptl *sip_get_udptl_peer(struct ast_channel *chan); 00311 extern int sip_set_udptl_peer(struct ast_channel *chan, struct ast_udptl *udptl); 00312