test_s2.h 4.33 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
/*
 * This file is part of the Sofia-SIP package
 *
 * Copyright (C) 2008 Nokia Corporation.
 *
 * Contact: Pekka Pessi <pekka.pessi@nokia.com>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This library 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
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA
 */

#ifndef S2TESTER_H
25
#define S2TESTER_H
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

#define TP_STACK_T struct tester
#define SU_ROOT_MAGIC_T struct tester

#include <sofia-sip/su_wait.h>
#include <sofia-sip/sip.h>
#include <sofia-sip/tport.h>
#include <sofia-sip/nua.h>

struct tester
{
  su_home_t home[1];

  su_root_t *root;
  msg_mclass_t const *mclass;
  int flags;

  char const *hostname;
  tport_t *master;

  sip_to_t *local;
  sip_contact_t *contact;
  struct {
    sip_contact_t *contact;
    tport_t *tport;
  } udp, tcp, tls;

  struct message {
    struct message *next, **prev;
    msg_t *msg;
    sip_t *sip;
    tport_t *tport;
    su_time_t when;
  } *received;
60 61 62 63 64 65 66 67 68

  struct {
    su_socket_t socket;
    su_wait_t wait[1];
    int reg;
  } dns;

  nua_t *nua;

69 70 71 72 73 74 75 76 77
  struct event {
    struct event *next, **prev;
    nua_saved_event_t event[1];
    nua_handle_t *nh;
    nua_event_data_t const *data;
    su_time_t when;
  } *events;

  struct {
78
    nua_handle_t *nh;
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
    sip_to_t *aor;
    sip_contact_t *contact;
    tport_t *tport;
  } registration[1];

  unsigned long tid;

  /* Settings */
  int server_uses_rport;
};

struct dialog
{
  su_home_t home[1];
  sip_from_t *local;
  sip_to_t *remote;
  sip_call_id_t *call_id;
  uint32_t lseq, rseq;
  sip_contact_t *target;
  sip_route_t *route;
  sip_contact_t *contact;
100 101 102

  tport_t *tport;
  msg_t *invite;		/* latest invite sent */
103 104
};

105
extern struct tester *s2;
106 107
extern tp_stack_class_t const s2_stack[1];

108 109 110 111
extern unsigned s2_default_registration_duration;
extern char const s2_auth_digest_str[];
extern char const s2_auth_credentials[];

Pekka Pessi's avatar
Pekka Pessi committed
112 113 114 115 116 117
extern char const s2_auth2_digest_str[];
extern char const s2_auth2_credentials[];

extern char const s2_auth3_digest_str[];
extern char const s2_auth3_credentials[];

118 119
extern int s2_nua_thread;

120 121
void s2_fast_forward(unsigned long seconds);

122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
void s2_case(char const *tag,
	    char const *title,
	    char const *description);

struct event *s2_remove_event(struct event *);
void s2_free_event(struct event *);
void s2_flush_events(void);

struct event *s2_next_event(void);
struct event *s2_wait_for_event(nua_event_t event, int status);
int s2_check_event(nua_event_t event, int status);
int s2_check_callstate(enum nua_callstate state);

struct message *s2_remove_message(struct message *m);
void s2_free_message(struct message *m);
void s2_flush_messages(void);

struct message *s2_next_response(void);
struct message *s2_wait_for_response(int status, sip_method_t , char const *);
int s2_check_response(int status, sip_method_t method, char const *name);

struct message *s2_next_request(void);
struct message *s2_wait_for_request(sip_method_t method, char const *name);
int s2_check_request(sip_method_t method, char const *name);

#define SIP_METHOD_UNKNOWN sip_method_unknown, NULL

struct message *s2_respond_to(struct message *m, struct dialog *d,
			      int status, char const *phrase,
			      tag_type_t tag, tag_value_t value, ...);

int s2_request_to(struct dialog *d,
		  sip_method_t method, char const *name,
		  tport_t *tport,
		  tag_type_t tag, tag_value_t value, ...);

int s2_update_dialog(struct dialog *d, struct message *response);

int s2_save_register(struct message *m);

void s2_flush_all(void);

164
void s2_setup_base(char const *hostname);
165 166
void s2_setup_logs(int level);
void s2_setup_tport(char const * const *protocols,
167
		    tag_type_t tag, tag_value_t value, ...);
168 169
void s2_teardown(void);

170 171 172 173 174 175
nua_t *s2_nua_setup(tag_type_t tag, tag_value_t value, ...);
void s2_nua_teardown(void);

void s2_register_setup(void);
void s2_register_teardown(void);

176
#endif