sofia-sip/nta.h

Go to the documentation of this file.
00001 /*
00002  * This file is part of the Sofia-SIP package
00003  *
00004  * Copyright (C) 2005 Nokia Corporation.
00005  *
00006  * Contact: Pekka Pessi <pekka.pessi@nokia-email.address.hidden>
00007  *
00008  * This library is free software; you can redistribute it and/or
00009  * modify it under the terms of the GNU Lesser General Public License
00010  * as published by the Free Software Foundation; either version 2.1 of
00011  * the License, or (at your option) any later version.
00012  *
00013  * This library is distributed in the hope that it will be useful, but
00014  * WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
00016  * Lesser General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU Lesser General Public
00019  * License along with this library; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
00021  * 02110-1301 USA
00022  *
00023  */
00024 
00025 #ifndef NTA_H
00026 
00027 #define NTA_H
00028 
00036 #ifndef SU_WAIT_H
00037 #include <sofia-sip/su_wait.h>
00038 #endif
00039 
00040 #ifndef SIP_H
00041 #include <sofia-sip/sip.h>
00042 #endif
00043 
00044 #ifndef NTA_TAG_H
00045 #include <sofia-sip/nta_tag.h>
00046 #endif
00047 
00048 SOFIA_BEGIN_DECLS
00049 
00050 /* ----------------------------------------------------------------------
00051  * 1) Types 
00052  */
00053 
00055 typedef struct nta_agent_s      nta_agent_t;
00057 typedef struct nta_leg_s        nta_leg_t;
00059 typedef struct nta_outgoing_s   nta_outgoing_t;
00061 typedef struct nta_incoming_s   nta_incoming_t;
00062 
00063 #ifndef NTA_AGENT_MAGIC_T
00064 
00067 #define NTA_AGENT_MAGIC_T struct nta_agent_magic_s
00068 #endif
00069 #ifndef NTA_LEG_MAGIC_T
00070 
00073 #define NTA_LEG_MAGIC_T struct nta_leg_magic_s
00074 #endif
00075 #ifndef NTA_OUTGOING_MAGIC_T
00076 
00079 #define NTA_OUTGOING_MAGIC_T struct nta_outgoing_magic_s
00080 #endif
00081 #ifndef NTA_INCOMING_MAGIC_T
00082 
00085 #define NTA_INCOMING_MAGIC_T struct nta_incoming_magic_s
00086 #endif
00087 
00089 typedef NTA_AGENT_MAGIC_T     nta_agent_magic_t;
00091 typedef NTA_LEG_MAGIC_T       nta_leg_magic_t;
00093 typedef NTA_OUTGOING_MAGIC_T  nta_outgoing_magic_t;
00095 typedef NTA_INCOMING_MAGIC_T  nta_incoming_magic_t;
00096 
00097 /* ----------------------------------------------------------------------
00098  * 2) Constants 
00099  */
00100 
00102 #define NTA_VERSION "2.0"
00103 
00105 SOFIAPUBVAR char const nta_version[];
00106 
00107 enum {
00108   /* Stack parameters */
00109   NTA_SIP_T1 = 500,             
00110   NTA_SIP_T2 = 4000,            
00111   NTA_SIP_T4 = 5000,            
00112   NTA_TIME_MAX = 15 * 24 * 3600 * 1000
00114 };
00115 
00116 /* ----------------------------------------------------------------------
00117  * 3) Agent-level prototypes
00118  */
00119 
00120 typedef int nta_message_f(nta_agent_magic_t *context,
00121                           nta_agent_t *agent,
00122                           msg_t *msg,
00123                           sip_t *sip);
00124 
00125 SOFIAPUBFUN 
00126 nta_agent_t *nta_agent_create(su_root_t *root,
00127                               url_string_t const *name,
00128                               nta_message_f *callback,
00129                               nta_agent_magic_t *magic,
00130                               tag_type_t tag, tag_value_t value, ...);
00131 
00132 SOFIAPUBFUN void nta_agent_destroy(nta_agent_t *agent);
00133 
00134 SOFIAPUBFUN char const *nta_agent_version(nta_agent_t const *a);
00135 SOFIAPUBFUN nta_agent_magic_t *nta_agent_magic(nta_agent_t const *a);
00136 
00137 SOFIAPUBFUN
00138 int nta_agent_add_tport(nta_agent_t *agent,
00139                         url_string_t const *url,
00140                         tag_type_t tag, tag_value_t value, ...);
00141 
00142 SOFIAPUBFUN int nta_agent_close_tports(nta_agent_t *agent);
00143 
00144 SOFIAPUBFUN sip_contact_t *nta_agent_contact(nta_agent_t const *a);
00145 SOFIAPUBFUN sip_via_t *nta_agent_via(nta_agent_t const *a);
00146 SOFIAPUBFUN sip_via_t *nta_agent_public_via(nta_agent_t const *a);
00147 
00148 SOFIAPUBFUN char const *nta_agent_newtag(su_home_t *,
00149                                          char const *fmt, nta_agent_t *);
00150 
00151 SOFIAPUBFUN int nta_agent_set_params(nta_agent_t *agent, 
00152                                      tag_type_t tag, tag_value_t value, ...);
00153 SOFIAPUBFUN int nta_agent_get_params(nta_agent_t *agent, 
00154                                      tag_type_t tag, tag_value_t value, ...);
00155 
00156 SOFIAPUBFUN int nta_agent_get_stats(nta_agent_t *agent, 
00157                                     tag_type_t tag, tag_value_t value, ...);
00158 
00159 /* ----------------------------------------------------------------------
00160  * 4) Message-level prototypes
00161  */
00162 
00163 SOFIAPUBFUN msg_t *nta_msg_create(nta_agent_t *self, int flags);
00164 
00165 SOFIAPUBFUN int nta_msg_complete(msg_t *msg);
00166 
00167 SOFIAPUBFUN int nta_msg_request_complete(msg_t *msg, 
00168                                          nta_leg_t *leg, 
00169                                          sip_method_t method, 
00170                                          char const *method_name,
00171                                          url_string_t const *req_url);
00172 
00173 SOFIAPUBFUN int nta_msg_is_internal(msg_t const *msg);
00174 SOFIAPUBFUN int nta_sip_is_internal(sip_t const *sip);
00175 
00176 /* ----------------------------------------------------------------------
00177  * 5) Leg-level prototypes
00178  */
00179 typedef int nta_request_f(nta_leg_magic_t *lmagic, 
00180                           nta_leg_t *leg,
00181                           nta_incoming_t *irq, 
00182                           sip_t const *sip);
00183 
00184 SOFIAPUBFUN 
00185 nta_leg_t *nta_leg_tcreate(nta_agent_t *agent,  
00186                            nta_request_f *req_callback,
00187                            nta_leg_magic_t *magic,
00188                            tag_type_t tag, tag_value_t value, ...);
00189 
00190 SOFIAPUBFUN void nta_leg_destroy(nta_leg_t *leg);
00191 
00192 SOFIAPUBFUN nta_leg_t *nta_default_leg(nta_agent_t const *agent);
00193 
00194 SOFIAPUBFUN nta_leg_magic_t *nta_leg_magic(nta_leg_t const *leg,
00195                                            nta_request_f *callback);
00196 
00197 SOFIAPUBFUN void nta_leg_bind(nta_leg_t *leg,
00198                               nta_request_f *callback,
00199                               nta_leg_magic_t *);
00200 
00202 SOFIAPUBFUN char const *nta_leg_tag(nta_leg_t *leg, char const *tag);
00203 
00205 SOFIAPUBFUN char const *nta_leg_get_tag(nta_leg_t const *leg);
00206 
00208 SOFIAPUBFUN char const *nta_leg_rtag(nta_leg_t *leg, char const *tag);
00209 
00211 SOFIAPUBFUN char const *nta_leg_get_rtag(nta_leg_t const *leg);
00212 
00214 SOFIAPUBFUN int nta_leg_client_route(nta_leg_t *leg, 
00215                                      sip_record_route_t const *route, 
00216                                      sip_contact_t const *contact);
00217 
00219 SOFIAPUBFUN int nta_leg_server_route(nta_leg_t *leg, 
00220                                      sip_record_route_t const *route, 
00221                                      sip_contact_t const *contact);
00222 
00224 SOFIAPUBFUN int nta_leg_get_route(nta_leg_t *leg, 
00225                                   sip_route_t const **return_route, 
00226                                   sip_contact_t const **return_target);
00227 
00229 SOFIAPUBFUN nta_leg_t *nta_leg_by_uri(nta_agent_t const *,
00230                                       url_string_t const *);
00231 
00233 SOFIAPUBFUN
00234 nta_leg_t *nta_leg_by_dialog(nta_agent_t const *agent, 
00235                              url_t const *request_uri,
00236                              sip_call_id_t const *call_id,
00237                              char const *from_tag,
00238                              url_t const *from_url,
00239                              char const *to_tag,
00240                              url_t const *to_url);
00241 
00243 SOFIAPUBFUN sip_replaces_t *nta_leg_make_replaces(nta_leg_t *leg,
00244                                                   su_home_t *home,
00245                                                   int early_only);
00247 SOFIAPUBFUN
00248 nta_leg_t *nta_leg_by_replaces(nta_agent_t *, sip_replaces_t const *);
00249 
00250 /* ----------------------------------------------------------------------
00251  * 6) Prototypes for incoming transactions 
00252  */
00253 
00254 SOFIAPUBFUN
00255 nta_incoming_t *nta_incoming_create(nta_agent_t *agent,
00256                                     nta_leg_t *leg,
00257                                     msg_t *msg,
00258                                     sip_t *sip,
00259                                     tag_type_t tag, tag_value_t value, ...);
00260 
00261 SOFIAPUBFUN nta_incoming_t *nta_incoming_default(nta_agent_t *agent);
00262 
00263 typedef int nta_ack_cancel_f(nta_incoming_magic_t *imagic,
00264                              nta_incoming_t *irq, 
00265                              sip_t const *sip);
00266 
00267 SOFIAPUBFUN void nta_incoming_bind(nta_incoming_t *irq, 
00268                                    nta_ack_cancel_f *callback,
00269                                    nta_incoming_magic_t *imagic);
00270 
00271 SOFIAPUBFUN
00272 nta_incoming_magic_t *nta_incoming_magic(nta_incoming_t *irq, 
00273                                          nta_ack_cancel_f *callback);
00274 
00275 SOFIAPUBFUN
00276 nta_incoming_t *nta_incoming_find(nta_agent_t const *agent, 
00277                                   sip_t const *sip,
00278                                   sip_via_t const *v);
00279 
00280 SOFIAPUBFUN char const *nta_incoming_tag(nta_incoming_t *irq, char const *tag);
00281 SOFIAPUBFUN char const *nta_incoming_gettag(nta_incoming_t const *irq);
00282 
00283 SOFIAPUBFUN int nta_incoming_status(nta_incoming_t const *irq);
00284 SOFIAPUBFUN sip_method_t nta_incoming_method(nta_incoming_t const *irq);
00285 SOFIAPUBFUN char const *nta_incoming_method_name(nta_incoming_t const *irq);
00286 SOFIAPUBFUN url_t const *nta_incoming_url(nta_incoming_t const *irq);
00287 SOFIAPUBFUN uint32_t nta_incoming_cseq(nta_incoming_t const *irq);
00288 SOFIAPUBFUN sip_time_t nta_incoming_received(nta_incoming_t *irq, su_nanotime_t *nano);
00289 
00290 SOFIAPUBFUN int nta_incoming_set_params(nta_incoming_t *irq,
00291                                         tag_type_t tag, tag_value_t value, ...);
00292 
00293 SOFIAPUBFUN msg_t *nta_incoming_getrequest(nta_incoming_t *irq);
00294 SOFIAPUBFUN msg_t *nta_incoming_getrequest_ackcancel(nta_incoming_t *irq);
00295 SOFIAPUBFUN msg_t *nta_incoming_getresponse(nta_incoming_t *irq);
00296 
00297 SOFIAPUBFUN
00298 int nta_incoming_complete_response(nta_incoming_t *irq,
00299                                    msg_t *msg,
00300                                    int status, 
00301                                    char const *phrase,
00302                                    tag_type_t tag, tag_value_t value, ...);
00303 
00304 SOFIAPUBFUN
00305 msg_t *nta_incoming_create_response(nta_incoming_t *irq, int status, char const *phrase);
00306 
00307 SOFIAPUBFUN
00308 int nta_incoming_treply(nta_incoming_t *ireq, 
00309                         int status, char const *phrase, 
00310                         tag_type_t tag, tag_value_t value, ...);
00311 
00312 SOFIAPUBFUN int nta_incoming_mreply(nta_incoming_t *irq, msg_t *msg);
00313 
00314 SOFIAPUBFUN void nta_incoming_destroy(nta_incoming_t *irq);
00315 
00316 /* Functions for feature, method, mime, session-timer negotation */
00317 
00318 SOFIAPUBFUN
00319 int nta_check_required(nta_incoming_t *irq,
00320                        sip_t const *sip,
00321                        sip_supported_t const *supported,
00322                        tag_type_t tag, tag_value_t value, ...);
00323 SOFIAPUBFUN
00324 int nta_check_supported(nta_incoming_t *irq,
00325                         sip_t const *sip,
00326                         sip_require_t *require,
00327                         tag_type_t tag, tag_value_t value, ...);
00328 SOFIAPUBFUN
00329 int nta_check_method(nta_incoming_t *irq,
00330                      sip_t const *sip,
00331                      sip_allow_t const *allow,
00332                      tag_type_t tag, tag_value_t value, ...);
00333 SOFIAPUBFUN
00334 int nta_check_session_content(nta_incoming_t *irq, sip_t const *sip,
00335                               sip_accept_t const *session_accepts,
00336                               tag_type_t tag, tag_value_t value, ...);
00337 SOFIAPUBFUN
00338 int nta_check_accept(nta_incoming_t *irq,
00339                      sip_t const *sip,
00340                      sip_accept_t const *acceptable,
00341                      sip_accept_t const **return_acceptable,
00342                      tag_type_t tag, tag_value_t value, ...);
00343 
00344 SOFIAPUBFUN
00345 int nta_check_session_expires(nta_incoming_t *irq,
00346                               sip_t const *sip,
00347                               sip_time_t my_min_se,
00348                               tag_type_t tag, tag_value_t value, ...);
00349 
00350 /* ----------------------------------------------------------------------
00351  * 7) Prototypes for outgoing transactions
00352  */
00353 typedef int nta_response_f(nta_outgoing_magic_t *magic,
00354                            nta_outgoing_t *request,
00355                            sip_t const *sip);
00356 
00357 SOFIAPUBFUN
00358 nta_outgoing_t *nta_outgoing_tcreate(nta_leg_t *leg,
00359                                      nta_response_f *callback,
00360                                      nta_outgoing_magic_t *magic,
00361                                      url_string_t const *route_url,
00362                                      sip_method_t method,
00363                                      char const *method_name,
00364                                      url_string_t const *request_uri,
00365                                      tag_type_t tag, tag_value_t value, ...);
00366 
00367 SOFIAPUBFUN
00368 nta_outgoing_t *nta_outgoing_mcreate(nta_agent_t *agent,
00369                                      nta_response_f *callback,
00370                                      nta_outgoing_magic_t *magic,
00371                                      url_string_t const *route_url, 
00372                                      msg_t *msg,
00373                                      tag_type_t tag, tag_value_t value, ...);
00374 
00375 SOFIAPUBFUN
00376 nta_outgoing_t *nta_outgoing_default(nta_agent_t *agent,
00377                                      nta_response_f *callback,
00378                                      nta_outgoing_magic_t *magic);
00379 
00380 SOFIAPUBFUN int nta_outgoing_status(nta_outgoing_t const *orq);
00381 SOFIAPUBFUN sip_method_t nta_outgoing_method(nta_outgoing_t const *orq);
00382 SOFIAPUBFUN char const *nta_outgoing_method_name(nta_outgoing_t const *orq);
00383 SOFIAPUBFUN uint32_t nta_outgoing_cseq(nta_outgoing_t const *orq);
00384 SOFIAPUBFUN char const *nta_outgoing_branch(nta_outgoing_t const *orq);
00385 
00386 SOFIAPUBFUN unsigned nta_outgoing_delay(nta_outgoing_t const *orq);
00387 
00388 SOFIAPUBFUN url_t const *nta_outgoing_request_uri(nta_outgoing_t const *orq);
00389 SOFIAPUBFUN url_t const *nta_outgoing_route_uri(nta_outgoing_t const *orq);
00390 
00391 SOFIAPUBFUN msg_t *nta_outgoing_getresponse(nta_outgoing_t *orq);
00392 SOFIAPUBFUN msg_t *nta_outgoing_getrequest(nta_outgoing_t *orq);
00393 
00394 SOFIAPUBFUN
00395 nta_outgoing_t *nta_outgoing_tagged(nta_outgoing_t *orq, 
00396                                     nta_response_f *callback,
00397                                     nta_outgoing_magic_t *magic,
00398                                     char const *to_tag,
00399                                     sip_rseq_t const *rseq);
00400 
00401 SOFIAPUBFUN int nta_outgoing_cancel(nta_outgoing_t *);
00402 
00403 SOFIAPUBFUN
00404 nta_outgoing_t *nta_outgoing_tcancel(nta_outgoing_t *orq, 
00405                                      nta_response_f *callback,
00406                                      nta_outgoing_magic_t *magic,
00407                                      tag_type_t, tag_value_t, ...);
00408 
00409 SOFIAPUBFUN void nta_outgoing_destroy(nta_outgoing_t *);
00410 
00411 SOFIAPUBFUN
00412 nta_outgoing_t *nta_outgoing_find(nta_agent_t const *sa,
00413                                   msg_t const *msg,
00414                                   sip_t const *sip, 
00415                                   sip_via_t const *v);
00416 
00417 SOFIAPUBFUN int nta_tport_keepalive(nta_outgoing_t *orq);
00418 
00419 /* ----------------------------------------------------------------------
00420  * 8) Reliable provisional responses (100rel)
00421  */
00422 
00423 /* UAC side */
00424 
00425 SOFIAPUBFUN
00426 nta_outgoing_t *nta_outgoing_prack(nta_leg_t *leg,
00427                                    nta_outgoing_t *oorq,
00428                                    nta_response_f *callback,
00429                                    nta_outgoing_magic_t *magic,
00430                                    url_string_t const *route_url,
00431                                    sip_t const *response_to_prack,
00432                                    tag_type_t, tag_value_t, ...);
00433 
00434 SOFIAPUBFUN uint32_t nta_outgoing_rseq(nta_outgoing_t const *orq);
00435 SOFIAPUBFUN int nta_outgoing_setrseq(nta_outgoing_t *orq, uint32_t rseq);
00436 
00437 /* UAS side */
00438 
00440 typedef struct nta_reliable_s   nta_reliable_t;
00441 
00442 #ifndef NTA_RELIABLE_MAGIC_T
00443 
00446 #define NTA_RELIABLE_MAGIC_T struct nta_reliable_magic_s
00447 #endif
00448 
00450 typedef NTA_RELIABLE_MAGIC_T  nta_reliable_magic_t;
00451 
00452 typedef int nta_prack_f(nta_reliable_magic_t *rmagic,
00453                         nta_reliable_t *rel,
00454                         nta_incoming_t *prack, 
00455                         sip_t const *sip);
00456 
00457 SOFIAPUBFUN
00458 nta_reliable_t *nta_reliable_treply(nta_incoming_t *ireq,
00459                                     nta_prack_f *callback,
00460                                     nta_reliable_magic_t *rmagic,
00461                                     int status, char const *phrase, 
00462                                     tag_type_t tag, 
00463                                     tag_value_t value, ...);
00464 
00465 SOFIAPUBFUN
00466 nta_reliable_t *nta_reliable_mreply(nta_incoming_t *irq, 
00467                                     nta_prack_f *callback,
00468                                     nta_reliable_magic_t *rmagic,
00469                                     msg_t *msg);
00470 
00471 SOFIAPUBFUN void nta_reliable_destroy(nta_reliable_t *);
00472 
00473 /* ----------------------------------------------------------------------
00474  * Backward-compatibility stuff - going away soon
00475  */
00476 
00477 #define nta_outgoing_tmcreate nta_outgoing_mcreate
00478 #define nta_msg_response_complete(msg, irq, status, phrase) \
00479   nta_incoming_complete_response((irq), (msg), (status), (phrase), TAG_END())
00480 
00481 SOFIAPUBFUN void nta_msg_discard(nta_agent_t *agent, msg_t *msg);
00482 
00483 SOFIAPUBFUN int nta_is_internal_msg(msg_t const *msg);
00484 
00485 SOFIA_END_DECLS
00486 
00487 #endif

Sofia-SIP 1.12.8 - Copyright (C) 2006 Nokia Corporation. All rights reserved. Licensed under the terms of the GNU Lesser General Public License.