blob: a88d87c21adb5ea325c1dc6f33ec2f2bf9d6d424 [file] [log] [blame]
/* $Id$ */
/*
* Copyright (C) 2003-2005 Benny Prijono <benny@prijono.org>
*
* This program 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.
*
* This program 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 __STUN_SERVER_H__
#define __STUN_SERVER_H__
#include <pjlib-util.h>
#include <pjlib.h>
/** Opaque declaration for STUN server instance */
typedef struct pj_stun_server pj_stun_server;
/** STUN server info */
typedef struct pj_stun_server_info
{
pj_pool_factory *pf;
pj_stun_endpoint *endpt;
pj_ioqueue_t *ioqueue;
pj_timer_heap_t *timer_heap;
unsigned thread_cnt;
} pj_stun_server_info;
/** STUN usage */
typedef struct pj_stun_usage pj_stun_usage;
/** STUN usage callback */
typedef struct pj_stun_usage_cb
{
void (*on_rx_data)(pj_stun_usage *usage,
void *pkt,
pj_size_t pkt_size,
const pj_sockaddr_t *src_addr,
unsigned src_addr_len);
void (*on_destroy)(pj_stun_usage *usage);
} pj_stun_usage_cb;
PJ_DECL(pj_status_t) pj_stun_perror(const char *sender,
const char *title,
pj_status_t status);
/**
* Create instance of STUN server.
*/
PJ_DECL(pj_status_t) pj_stun_server_create(pj_pool_factory *pf,
unsigned thread_cnt,
pj_stun_server **p_srv);
/**
* Get STUN server info.
*/
PJ_DECL(pj_stun_server_info*) pj_stun_server_get_info(pj_stun_server *srv);
/**
* Destroy STUN server.
*/
PJ_DECL(pj_status_t) pj_stun_server_destroy(pj_stun_server *srv);
/**
* Create STUN usage.
*/
PJ_DECL(pj_status_t) pj_stun_usage_create(pj_stun_server *srv,
const char *name,
const pj_stun_usage_cb *cb,
int family,
int type,
int protocol,
const pj_sockaddr_t *local_addr,
int addr_len,
pj_stun_usage **p_usage);
/**
* Destroy usage.
*/
PJ_DECL(pj_status_t) pj_stun_usage_destroy(pj_stun_usage *usage);
/**
* Set user data.
*/
PJ_DECL(pj_status_t) pj_stun_usage_set_user_data(pj_stun_usage *usage,
void *user_data);
/**
* Get user data.
*/
PJ_DECL(void*) pj_stun_usage_get_user_data(pj_stun_usage *usage);
/**
* Send with the usage.
*/
PJ_DECL(pj_status_t) pj_stun_usage_sendto(pj_stun_usage *usage,
const void *pkt,
pj_size_t pkt_size,
unsigned flags,
const pj_sockaddr_t *dst_addr,
unsigned addr_len);
PJ_DECL(pj_status_t) pj_stun_bind_usage_create(pj_stun_server *srv,
const pj_str_t *ip_addr,
unsigned port,
pj_stun_usage **p_bu);
PJ_DECL(pj_status_t) pj_stun_turn_usage_create(pj_stun_server *srv,
int type,
const pj_str_t *ip_addr,
unsigned port,
pj_stun_usage **p_bu);
pj_status_t pj_stun_server_register_usage(pj_stun_server *srv,
pj_stun_usage *usage);
pj_status_t pj_stun_server_unregister_usage(pj_stun_server *srv,
pj_stun_usage *usage);
#endif /* __STUN_SERVER_H__ */