1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
/*
* $Id: t_reply.h,v 1.3 2006/05/19 09:41:09 bogdan_iancu Exp $
*
* Copyright (C) 2001-2003 FhG Fokus
*
* This file is part of openser, a free SIP server.
*
* openser 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
*
* openser 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef _T_REPLY_H
#define _T_REPLY_H
#include "../../tags.h"
#include "h_table.h"
extern int restart_fr_on_each_reply;
/* reply processing status */
enum rps {
/* something bad happened */
RPS_ERROR=0,
/* transaction completed but we still accept the reply */
RPS_PUSHED_AFTER_COMPLETION,
/* reply discarded */
RPS_DISCARDED,
/* reply stored for later processing */
RPS_STORE,
/* transaction completed */
RPS_COMPLETED,
/* provisional reply not affecting transaction state */
RPS_PROVISIONAL
};
extern char tm_tags[TOTAG_VALUE_LEN];
extern char *tm_tag_suffix;
/* has this to-tag been never seen in previous 200/INVs? */
int unmatched_totag(struct cell *t, struct sip_msg *ack);
/* branch bitmap type */
typedef unsigned int branch_bm_t;
/* reply export types */
typedef int (*treply_f)(struct sip_msg * , unsigned int , char * );
typedef int (*treply_wb_f)( struct cell* trans,
unsigned int code, char * text, char * body,
char * new_header, char * to_tag);
#define LOCK_REPLIES(_t) lock(&(_t)->reply_mutex )
#define UNLOCK_REPLIES(_t) unlock(&(_t)->reply_mutex )
/* This function is called whenever a reply for our module is received;
* we need to register this function on module initialization;
* Returns : 0 - core router stops
* 1 - core router relay statelessly
*/
int reply_received( struct sip_msg *p_msg ) ;
/* Retransmits the last sent inbound reply.
* Returns -1 - error
* 1 - OK
*/
int t_retransmit_reply( /* struct sip_msg * */ );
/* send a UAS reply
* Warning: 'buf' and 'len' should already have been build.
* returns 1 if everything was OK or -1 for error
*/
#ifdef _OBSO
int t_reply_light( struct cell *trans, char* buf, unsigned int len,
unsigned int code, char * text,
char *to_tag, unsigned int to_tag_len);
#endif
int t_reply_with_body( struct cell *trans, unsigned int code,
char * text, char * body, char * new_header, char * to_tag );
/* send a UAS reply
* returns 1 if everything was OK or -1 for error
*/
int t_reply( struct cell *t, struct sip_msg * , unsigned int , char * );
/* the same as t_reply, except it does not claim
REPLY_LOCK -- useful to be called within reply
processing
*/
int t_reply_unsafe( struct cell *t, struct sip_msg * , unsigned int , char * );
enum rps relay_reply( struct cell *t, struct sip_msg *p_msg, int branch,
unsigned int msg_status, branch_bm_t *cancel_bitmap );
enum rps local_reply( struct cell *t, struct sip_msg *p_msg, int branch,
unsigned int msg_status, branch_bm_t *cancel_bitmap );
void set_final_timer( /* struct s_table *h_table,*/ struct cell *t );
void cleanup_uac_timers( struct cell *t );
void on_negative_reply( struct cell* t, struct sip_msg* msg,
int code, void *param );
typedef int (*tget_picked_f)(void);
int t_get_picked_branch();
/* set which 'reply' structure to take if only negative
replies arrive
*/
void t_on_negative( unsigned int go_to );
unsigned int get_on_negative();
void t_on_reply( unsigned int go_to );
unsigned int get_on_reply();
int t_retransmit_reply( struct cell *t );
void tm_init_tags();
int fifo_t_reply( FILE *stream, char *response_file );
int unixsock_t_reply(str* msg);
#endif
|