nea  1.12.11
sofia-sip/nea.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 NEA_H
00026 
00027 #define NEA_H
00028 
00037 #ifndef SU_ALLOC_H
00038 #include <sofia-sip/su_alloc.h>
00039 #endif
00040 
00041 #include <sofia-sip/su_tag.h>
00042 
00043 #ifndef NTA_H
00044 #include <sofia-sip/nta.h>
00045 #endif
00046 
00047 #ifndef NEA_TAG_H
00048 #include <sofia-sip/nea_tag.h>
00049 #endif
00050 
00051 SOFIA_BEGIN_DECLS
00052 
00053 #define NEA_VERSION      3.0
00054 #define NEA_VERSION_STR "3.0"
00055 
00056 #define NEA_DEFAULT_EXPIRES 3600
00057 
00059 typedef struct nea_server_s     nea_server_t;
00060 
00062 typedef struct nea_sub_s        nea_sub_t;
00063 
00065 typedef struct nea_event_s      nea_event_t;
00066 
00068 typedef struct nea_event_view_s nea_event_view_t;
00069 
00070 #ifndef NEA_SMAGIC_T
00071 #define NEA_SMAGIC_T            struct nea_smagic_t
00072 #endif
00073 
00074 typedef NEA_SMAGIC_T nea_smagic_t;
00075 
00076 #ifndef NEA_EMAGIC_T
00077 #define NEA_EMAGIC_T            struct nea_emagic_t
00078 #endif
00079 
00080 typedef NEA_EMAGIC_T nea_emagic_t;
00081 
00082 #ifndef NEA_EVMAGIC_T
00083 #define NEA_EVMAGIC_T           struct nea_evmagic_t
00084 #endif
00085 
00086 typedef NEA_EVMAGIC_T nea_evmagic_t;
00087 
00089 typedef struct nea_subnode_t {
00090   nea_state_t          sn_state;        
00091   unsigned             sn_fake;         
00094   unsigned             sn_eventlist;    
00095   nea_sub_t           *sn_subscriber;   
00096   nea_event_t         *sn_event;        
00097   sip_from_t const    *sn_remote;       
00098   sip_contact_t const *sn_contact;      
00101   sip_content_type_t const *sn_content_type;
00102   sip_payload_t const *sn_payload;      
00104   unsigned             sn_expires;      
00105   unsigned             sn_latest;       
00106   unsigned             sn_throttle;     
00107   unsigned             sn_version;      
00108   sip_time_t           sn_notified;     
00109   sip_time_t           sn_subscribed;   
00110   nea_event_view_t    *sn_view;         
00111 } nea_subnode_t;
00112 
00114 typedef struct nea_payloads_s   nea_payloads_t;
00115 
00128 typedef int (nea_new_event_f)(nea_smagic_t *context,
00129                               nea_server_t *nes,
00130                               nea_event_t **event_p,
00131                               nea_event_view_t **view_p,
00132                               nta_incoming_t *irq,
00133                               sip_t const *sip);
00134 
00136 SOFIAPUBFUN
00137 nea_server_t *nea_server_create(nta_agent_t *agent,
00138                                 su_root_t *root,
00139                                 url_t const *url,
00140                                 int max_subs,
00141                                 nea_new_event_f *callback,
00142                                 nea_smagic_t *context,
00143                                 tag_type_t tag, tag_value_t value,
00144                                 ...);
00145 
00146 
00148 SOFIAPUBFUN int nea_server_shutdown(nea_server_t *nes, int retry_after);
00149 
00151 SOFIAPUBFUN void nea_server_destroy(nea_server_t *nes);
00152 
00154 SOFIAPUBFUN void nea_server_flush(nea_server_t *nes, nea_event_t *event);
00155 
00157 SOFIAPUBFUN
00158 int nea_server_update(nea_server_t *nes,
00159                       nea_event_t *ev,
00160                       tag_type_t tag,
00161                       tag_value_t value,
00162                       ...);
00163 
00165 SOFIAPUBFUN
00166 int nea_server_add_irq(nea_server_t *nes,
00167                        nta_leg_t *leg,
00168                        sip_contact_t const *local_target,
00169                        nta_incoming_t *irq,
00170                        sip_t const *sip);
00171 
00181 typedef void (nea_watcher_f)(nea_server_t *nes,
00182                              nea_emagic_t *context,
00183                              nea_event_t *event,
00184                              nea_subnode_t *subnode,
00185                              sip_t const *sip);
00186 
00188 SOFIAPUBFUN
00189 nea_event_t *nea_event_create(nea_server_t *nes,
00190                               nea_watcher_f *callback,
00191                               nea_emagic_t *context,
00192                               char const *name,
00193                               char const *subname,
00194                               char const *default_content_type,
00195                               char const *accept);
00196 
00198 SOFIAPUBFUN
00199 nea_event_t *nea_event_tcreate(nea_server_t *nes,
00200                                nea_watcher_f *callback,
00201                                nea_emagic_t *context,
00202                                char const *name,
00203                                char const *subname,
00204                                tag_type_t, tag_value_t, ...);
00205 
00207 SOFIAPUBFUN nea_emagic_t *nea_emagic_get(nea_event_t *event);
00208 
00210 SOFIAPUBFUN nea_event_t *nea_event_get(nea_server_t const *, char const *name);
00211 
00213 SOFIAPUBFUN int nea_server_active(nea_server_t *nes, nea_event_t const *ev);
00214 
00216 int nea_server_non_embryonic(nea_server_t *nes, nea_event_t const *ev);
00217 
00220 SOFIAPUBFUN
00221 nea_subnode_t const **nea_server_get_subscribers(nea_server_t *nes,
00222                                                  nea_event_t const *ev);
00223 
00225 SOFIAPUBFUN
00226 void nea_server_free_subscribers(nea_server_t *nes, nea_subnode_t const **);
00227 
00229 SOFIAPUBFUN
00230 int nea_server_notify(nea_server_t *nes,
00231                       nea_event_t *ev);
00232 
00234 SOFIAPUBFUN
00235 int nea_server_notify_one(nea_server_t *nes,
00236                           nea_event_t *ev,
00237                           nea_sub_t *ns);
00238 
00239 #define nea_server_auth nea_sub_auth
00240 
00242 SOFIAPUBFUN nta_incoming_t *nea_sub_get_request(nea_sub_t *sub);
00243 
00245 SOFIAPUBFUN
00246 int nea_sub_auth(nea_sub_t *, nea_state_t state,
00247                  tag_type_t, tag_value_t, ...);
00248 
00250 SOFIAPUBFUN nta_incoming_t *nea_subnode_get_incoming(nea_subnode_t *sn);
00252 SOFIAPUBFUN int nea_sub_version(nea_sub_t *, unsigned);
00253 
00255 SOFIAPUBFUN unsigned nea_sub_pending(nea_sub_t const *);
00256 
00257 #if 0
00258 
00263 void nea_server_qauth(nea_server_t *nes,
00264                       nea_emagic_t *context,
00265                       nea_sub_t *subscriber,
00266                       sip_t const *sip);
00267 #endif
00268 
00270 SOFIAPUBFUN
00271 nea_event_view_t *nea_event_view(nea_event_t *, char const *content_type);
00272 
00274 SOFIAPUBFUN
00275 sip_content_type_t const *nea_view_content_type(nea_event_view_t const *);
00276 
00278 SOFIAPUBFUN sip_payload_t const *nea_view_payload(nea_event_view_t *);
00279 
00281 SOFIAPUBFUN nea_event_view_t *nea_view_create(nea_server_t *nes,
00282                                               nea_event_t *ev,
00283                                               nea_evmagic_t *magic,
00284                                               tag_type_t tag,
00285                                               tag_value_t value,
00286                                               ...);
00287 
00289 SOFIAPUBFUN void nea_view_destroy(nea_server_t *nes, nea_event_view_t *ev);
00290 
00291 SOFIAPUBFUN nea_evmagic_t *nea_view_magic(nea_event_view_t const *);
00292 
00293 SOFIAPUBFUN void nea_view_set_magic(nea_event_view_t *, nea_evmagic_t *magic);
00294 
00295 SOFIAPUBFUN unsigned nea_view_version(nea_event_view_t const *);
00296 
00298 #define NEATAG_RELIABLE(x)    neatag_reliable, tag_bool_v((x))
00299 SOFIAPUBVAR tag_typedef_t neatag_reliable;
00300 
00301 #define NEATAG_RELIABLE_REF(x) neatag_reliable_ref, tag_bool_vr((&x))
00302 SOFIAPUBVAR tag_typedef_t neatag_reliable_ref;
00303 
00305 #define NEATAG_VIEW(x)     neatag_view, tag_ptr_v((x))
00306 SOFIAPUBVAR tag_typedef_t neatag_view;
00307 
00308 #define NEATAG_VIEW_REF(x) neatag_view_ref, tag_ptr_vr((&x), (x))
00309 SOFIAPUBVAR tag_typedef_t neatag_view_ref;
00310 
00312 #define NEATAG_EVMAGIC(x)     neatag_evmagic, tag_ptr_v((x))
00313 SOFIAPUBVAR tag_typedef_t neatag_evmagic;
00314 
00315 #define NEATAG_EVMAGIC_REF(x) neatag_evmagic_ref, tag_ptr_vr((&x), (x))
00316 SOFIAPUBVAR tag_typedef_t neatag_evmagic_ref;
00317 
00319 #define NEATAG_SUB(x)     neatag_sub, tag_ptr_v((x))
00320 SOFIAPUBVAR tag_typedef_t neatag_sub;
00321 
00322 #define NEATAG_SUB_REF(x) neatag_sub_ref, tag_ptr_vr((&x), (x))
00323 SOFIAPUBVAR tag_typedef_t neatag_sub_ref;
00324 
00325 
00326 /* ====================================================================== */
00327 /* Watcher side */
00328 
00330 typedef struct nea_s     nea_t;
00331 
00332 #ifndef NEA_MAGIC_T
00333 #define NEA_MAGIC_T struct nea_magic_t
00334 #endif
00335 
00337 typedef NEA_MAGIC_T          nea_magic_t;
00338 
00344 typedef int (*nea_notify_f)(nea_t *nea,
00345                             nea_magic_t *context,
00346                             sip_t const *sip);
00347 
00348 /* ====================================================================== */
00349 /* Client side */
00350 
00352 SOFIAPUBFUN
00353 nea_t *nea_create(nta_agent_t *agent,
00354                   su_root_t *root,
00355                   nea_notify_f no_callback,
00356                   nea_magic_t *context,
00357                   tag_type_t tag,
00358                   tag_value_t value,
00359                   ...);
00360 
00362 SOFIAPUBFUN
00363 int nea_update(nea_t *nea,
00364                tag_type_t tag,
00365                tag_value_t value,
00366                ...);
00367 
00369 SOFIAPUBFUN void nea_end(nea_t *agent);
00370 
00372 SOFIAPUBFUN void nea_destroy(nea_t *agent);
00373 
00374 SOFIAPUBFUN char const *nea_default_content_type(char const *event);
00375 
00376 SOFIA_END_DECLS
00377 
00378 #endif /* !defined(NEA_H) */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines

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