123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- /*
- * Presence Agent, watcher structure and related functions
- *
- * $Id$
- *
- * Copyright (C) 2001-2003 FhG Fokus
- *
- * This file is part of ser, a free SIP server.
- *
- * ser is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * For a license to use the ser software under conditions
- * other than those described here, or to purchase support for this
- * software, please contact iptel.org by e-mail at the following addresses:
- * [email protected]
- *
- * ser is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #ifndef WATCHER_H
- #define WATCHER_H
- #include "../../str.h"
- #include "../../modules/tm/dlg.h"
- #include "../../lib/srdb2/db.h"
- #include "../../parser/parse_content.h"
- #include "../../parser/parse_event.h" /* EVENT_PRESENCE, EVENT_PRESENCE_WINFO, ... */
- #include <stdio.h>
- #include <time.h>
- #define DOC_XPIDF MIMETYPE(APPLICATION,XPIDFXML)
- #define DOC_LPIDF MIMETYPE(APPLICATION,LPIDFXML)
- #define DOC_PIDF MIMETYPE(APPLICATION,PIDFXML)
- #define DOC_CPIM_PIDF MIMETYPE(APPLICATION,CPIM_PIDFXML)
- #define DOC_MSRTC_PIDF MIMETYPE(APPLICATION,XML_MSRTC_PIDF)
- #define DOC_WINFO MIMETYPE(APPLICATION,WATCHERINFOXML)
- /* DOC_XCAP_CHANGE = (1 << 4),
- DOC_LOCATION = (1 << 5),*/
- #define DOC_MULTIPART_RELATED MIMETYPE(MULTIPART,RELATED),
- #define DOC_RLMI_XML MIMETYPE(APPLICATION,RLMIXML)
- typedef enum watcher_status {
- WS_PENDING = 0,
- WS_ACTIVE = 1,
- WS_REJECTED = 2,
- WS_TERMINATED = 3,
- WS_PENDING_TERMINATED = 4
- } watcher_status_t;
- extern str watcher_status_names[];
- extern str watcher_event_names[];
- typedef enum watcher_event {
- WE_SUBSCRIBE = 0,
- WE_APPROVED = 1,
- WE_DEACTIVATED = 2,
- WE_PROBATION = 3,
- WE_REJECTED = 4,
- WE_TIMEOUT = 5,
- WE_GIVEUP = 6,
- WE_NORESOURCE = 7
- } watcher_event_t;
- typedef enum wflags {
- WFLAG_SUBSCRIPTION_CHANGED=1
- } wflags_t;
- /*
- * Structure representing a watcher
- */
- typedef struct watcher {
- str display_name; /* Display Name of watcher */
- str uri; /* Uri of the watcher */
- time_t expires; /* Absolute of the expiration */
- int event_package; /* event package being watched */
- int preferred_mimetype; /* Type of document accepted by the watcher */
- int document_index; /* many documents (winfo, ...) requires sequential numbering */
- dlg_t* dialog; /* Dialog handle */
- str id; /* id of this watcher (used for DB and winfo docs) */
- str server_contact; /* used for contact header in NOTIFY messages */
- wflags_t flags;
- watcher_event_t event;
- watcher_status_t status; /* status of subscription */
- struct watcher *prev, *next; /* linking members */
- } watcher_t;
- struct presentity;
- /* Convert watcher status name to enum */
- watcher_status_t watcher_status_from_string(str *wsname);
- /* Create a new watcher structure */
- int new_watcher_no_wb(str* _uri, time_t _e, int event_package,
- int doc_type, dlg_t* _dlg, str *display_name,
- str *server_contact,
- str *id, /* database ID or NULL if not loading from DB */
- watcher_t** _w);
- /* Release a watcher structure */
- void free_watcher(watcher_t* _w);
- /** Appends watcher/winfo watcher to presentity. It updates presentity's
- * flags and adds the watcher into DB if requested and use_db set. */
- int append_watcher(struct presentity *_p, watcher_t *_w, int add_to_db);
-
- /* Remove a watcher/winfo watcher from the watcher list and from database. */
- void remove_watcher(struct presentity* _p, watcher_t* _w);
- /* Find a watcher/winfo watcher in the list/winfo list (according to
- * _et parameter) via dialog identifier */
- int find_watcher_dlg(struct presentity* _p, dlg_id_t *dlg_id, int _et, watcher_t** _w);
- /* update watcher in db */
- int db_update_watcher(struct presentity *p, watcher_t* _w);
- /* Update expires value of a watcher */
- int update_watcher(struct presentity *p, watcher_t* _w, time_t _e, struct sip_msg *m);
- /* Read watcherinfo table from database for presentity _p */
- int db_read_watcherinfo(struct presentity *_p, db_con_t* db);
- /** Returns 1 if given watcher is in one of terminated statuses
- * and should be deleted */
- int is_watcher_terminated(watcher_t *w);
- /** Returns 1 if given watcher can receive status documents */
- int is_watcher_authorized(watcher_t *w);
- /** Sets status to correct terminated status for this watcher. */
- void set_watcher_terminated_status(watcher_t *w);
- const char *event_package2str(int et);
- #endif /* WATCHER_H */
|