64 bit goodies

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@897 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2006-03-22 17:05:16 +00:00
parent ce72c5d1c8
commit 0e76b6355c
8 changed files with 1469 additions and 18 deletions

View File

@ -1,13 +1,13 @@
#CFLAGS += -I/usr/src/common/src
CFLAGS += -I.
LDFLAGS += -leXosip2 -ljrtp
OBJS=osip_rfc3264.o
ifeq ($(OSARCH),Darwin)
LINKER=g++
else
LINKER=$(CC)
endif
all: depends $(MODNAME).$(DYNAMIC_LIB_EXTEN)
all: depends $(OBJS) $(MODNAME).$(DYNAMIC_LIB_EXTEN)
depends:
MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install jrtplib --prefix=$(PREFIX) --disable-gst
@ -15,9 +15,12 @@ depends:
MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libeXosip2-2.2.2.tar.gz --disable-josua --prefix=$(PREFIX)
%.o: %.c
$(CC) -fPIC $(CFLAGS) -c -o $@ $<
$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c
$(CC) $(CFLAGS) -fPIC -c $(MODNAME).c -o $(MODNAME).o
$(LINKER) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(MODNAME).o $(LDFLAGS)
$(LINKER) $(SOLINK) -o $(MODNAME).$(DYNAMIC_LIB_EXTEN) $(OBJS) $(MODNAME).o $(LDFLAGS)
clean:
rm -fr *.$(DYNAMIC_LIB_EXTEN) *.o *~

View File

@ -35,8 +35,9 @@
#include <jrtplib3/jrtp4c.h>
#include <eXosip2/eXosip.h>
#include <osip2/osip_mt.h>
#include <osipparser2/osip_rfc3264.h>
#include <osip_rfc3264.h>
#include <osipparser2/osip_port.h>
#define ENABLE_TRACE
static const char modname[] = "mod_exosip";
#define STRLEN 15
@ -951,6 +952,9 @@ SWITCH_MOD_DECLARE(switch_status) switch_module_load(const switch_loadable_modul
{
/* NOTE: **interface is **_interface because the common lib redefines interface to struct in some situations */
osip_trace_initialize(10, stdout);
if (switch_core_new_memory_pool(&module_pool) != SWITCH_STATUS_SUCCESS) {
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "OH OH no pool\n");
return SWITCH_STATUS_TERM;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,309 @@
/*
The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
Copyright (C) 2001,2002,2003,2004 Aymeric MOIZARD jack@atosc.org
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __SDP_RFC3264_H__
#define __SDP_RFC3264_H__
#include <osipparser2/osip_list.h>
#include <osipparser2/sdp_message.h>
/**
* @file osip_rfc3264.h
* @brief oSIP sdp negotiation facility.
*/
/**
* @defgroup oSIP_rfc3264 oSIP sdp negotiation facility.
* @ingroup osip2_sdp
* @{
*/
#ifdef __cplusplus
extern "C"
{
#endif
/**
* Structure to hold support for codecs.
* @struct osip_rfc3264
*/
struct osip_rfc3264;
/**
* Maximum number of supported audio payload.
* @def MAX_AUDIO_CODECS
*/
#define MAX_AUDIO_CODECS 100
/**
* Maximum number of supported video payload.
* @def MAX_VIDEO_CODECS
*/
#define MAX_VIDEO_CODECS 100
/**
* Maximum number of supported t38 config.
* @def MAX_T38_CODECS
*/
#define MAX_T38_CODECS 2
/**
* Maximum number of supported application config.
* @def MAX_APP_CODECS
*/
#define MAX_APP_CODECS 100
/**
* Initialize negotiation facility..
* @param config The element to work on.
*/
int osip_rfc3264_init (struct osip_rfc3264 **config);
/**
* Free negotiation facility.
* @param config The element to work on.
*/
void osip_rfc3264_free (struct osip_rfc3264 *config);
/**
* Test if a media exist in the configuration.
* @param config The element to work on.
* @param pos The index of the media element.
*/
int osip_rfc3264_endof_media (struct osip_rfc3264 *config, int pos);
/**
* Get a media from the configuration.
* @param config The element to work on.
* @param pos The index of the media element to get.
*/
sdp_media_t *osip_rfc3264_get (struct osip_rfc3264 *config, int pos);
/**
* Remove a media from the configuration.
* @param config The element to work on.
* @param pos The index of the media element to remove.
*/
int osip_rfc3264_remove (struct osip_rfc3264 *config, int pos);
/**
* Remove all medias from the configuration.
* @param config The element to work on.
*/
int osip_rfc3264_reset_media (struct osip_rfc3264 *config);
/**
* Add a media in the configuration.
* @param config The element to work on.
* @param med The media element to add.
* @param pos The index of the media element to add.
*/
int osip_rfc3264_add_audio_media (struct osip_rfc3264 *config,
sdp_media_t * med, int pos);
/**
* Remove a media in the configuration.
* @param config The element to work on.
* @param pos The index of the media element to remove.
*/
int osip_rfc3264_del_audio_media (struct osip_rfc3264 *config, int pos);
/**
* Add a media (for T.38) in the configuration.
* @param config The element to work on.
* @param med The media element to add.
* @param pos The index of the media element to add.
*/
int osip_rfc3264_add_t38_media (struct osip_rfc3264 *config,
sdp_media_t * med, int pos);
/**
* Remove a media (for T.38) in the configuration.
* @param config The element to work on.
* @param pos The index of the media element to remove.
*/
int osip_rfc3264_del_t38_media (struct osip_rfc3264 *config, int pos);
/**
* Add a media (for video) in the configuration.
* @param config The element to work on.
* @param med The media element to add.
* @param pos The index of the media element to add.
*/
int osip_rfc3264_add_video_media (struct osip_rfc3264 *config,
sdp_media_t * med, int pos);
/**
* Remove a media in the configuration.
* @param config The element to work on.
* @param pos The index of the media element to remove.
*/
int osip_rfc3264_del_video_media (struct osip_rfc3264 *config, int pos);
/**
* Search for support of a special codec.
* @param config The element to work on.
*/
sdp_media_t *osip_rfc3264_find_audio (struct osip_rfc3264 *config,
char *payload, char *rtpmap);
/**
* Search for support of a special codec.
* @param config The element to work on.
* @param payload The payload to find.
* @param rtpmap The rtpmap for the payload.
*/
sdp_media_t *osip_rfc3264_find_video (struct osip_rfc3264 *config,
char *payload, char *rtpmap);
/**
* Search for support of a special codec.
* @param config The element to work on.
* @param payload The payload to find.
*/
sdp_media_t *osip_rfc3264_find_t38 (struct osip_rfc3264 *config, char *payload);
/**
* Search for support of a special codec.
* @param config The element to work on.
* @param payload The payload to find.
*/
sdp_media_t *osip_rfc3264_find_app (struct osip_rfc3264 *config, char *payload);
/**
* Compare remote sdp packet against local supported media.
* Only one media line is checked.
*
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param audio_tab The local list of media supported by both side.
* @param video_tab The local list of media supported by both side.
* @param t38_tab The local list of media supported by both side.
* @param app_tab The local list of media supported by both side.
* @param pos_media The position of the media line to match.
*/
int osip_rfc3264_match (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
sdp_media_t * audio_tab[],
sdp_media_t * video_tab[],
sdp_media_t * t38_tab[],
sdp_media_t * app_tab[], int pos_media);
/**
* Compare remote sdp packet against local supported media for audio.
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param remote_med The remote Media SDP line.
* @param audio_tab The local list of media supported by both side.
*/
int osip_rfc3264_match_audio (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
sdp_media_t * remote_med,
sdp_media_t * audio_tab[]);
/**
* Compare remote sdp packet against local supported media for video.
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param remote_med The remote Media SDP line.
* @param video_tab The local list of media supported by both side.
*/
int osip_rfc3264_match_video (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
sdp_media_t * remote_med,
sdp_media_t * video_tab[]);
/**
* Compare remote sdp packet against local supported media for t38.
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param remote_med The remote Media SDP line.
* @param t38_tab The local list of media supported by both side.
*/
int osip_rfc3264_match_t38 (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
sdp_media_t * remote_med, sdp_media_t * t38_tab[]);
/**
* Compare remote sdp packet against local supported media for application.
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param remote_med The remote Media SDP line.
* @param app_tab The local list of media supported by both side.
*/
int osip_rfc3264_match_app (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
sdp_media_t * remote_med, sdp_media_t * app_tab[]);
/**
* Prepare an uncomplete answer.
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param local_sdp The local SDP packet to prepare.
* @param length The local SDP packet's length.
*/
int osip_rfc3264_prepare_answer (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
char *local_sdp, int length);
/**
* Agree to support a specific codec.
* This method should be called for each codec returned by
* osip_rfc3264_match(...) that the calle agree to support.
*
* @param config The element to work on.
* @param remote_sdp The remote SDP packet.
* @param local_sdp The local SDP packet to complete.
* @param med One of the media returned by osip_rfc3264_match.
* @param mline The position of the media line to complete.
*/
int
osip_rfc3264_complete_answer (struct osip_rfc3264 *config,
sdp_message_t * remote_sdp,
sdp_message_t * local_sdp,
sdp_media_t * med, int mline);
/**
* Agree to support a specific codec.
* This method should be called for each codec returned by
* osip_rfc3264_match(...)
*
* @param config The element to work on.
* @param med One of the media returned by osip_rfc3264_match
* @param remote_sdp The remote SDP packet.
* @param local_sdp The local SDP packet to prepare.
*/
int osip_rfc3264_accept_codec (struct osip_rfc3264 *config,
sdp_media_t * med,
sdp_message_t * remote_sdp,
sdp_message_t * local_sdp);
/**
* List supported codecs. (for debugging purpose only)
*
* @param config The element to work on.
*/
int __osip_rfc3264_print_codecs (struct osip_rfc3264 *config);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,41 @@
/*
The oSIP library implements the Session Initiation Protocol (SIP -rfc3261-)
Copyright (C) 2001,2002,2003,2004,2005 Aymeric MOIZARD jack@atosc.org
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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __SDP_RFC3264I_H__
#define __SDP_RFC3264I_H__
#include <osipparser2/osip_list.h>
#include <osipparser2/sdp_message.h>
#include <osipparser2/osip_rfc3264.h>
#ifndef DOXYGEN
typedef struct osip_rfc3264 osip_rfc3264_t;
struct osip_rfc3264
{
sdp_media_t *audio_medias[MAX_AUDIO_CODECS];
sdp_media_t *video_medias[MAX_VIDEO_CODECS];
sdp_media_t *t38_medias[MAX_T38_CODECS];
sdp_media_t *app_medias[MAX_APP_CODECS];
};
#endif
#endif

View File

@ -1,5 +1,5 @@
CFLAGS +=-I/usr/local/include -I/usr/src/libpri -I/usr/src/linux/include -I. -I/usr/include
CFLAGS +=-D__LINUX__ -D_REENTRANT -D_GNU_SOURCE -O6 -march=i686 -DAFT_A104
CFLAGS +=-D__LINUX__ -D_REENTRANT -D_GNU_SOURCE -DAFT_A104
LDFLAGS += -lsangoma
@ -12,6 +12,7 @@ endif
all: depends $(MODNAME).$(DYNAMIC_LIB_EXTEN)
depends:
MAKE=$(MAKE) $(BASE)/build/buildlib.sh $(BASE) install libsangoma --prefix=$(PREFIX)
$(MODNAME).$(DYNAMIC_LIB_EXTEN): $(MODNAME).c
$(CC) $(CFLAGS) -fPIC -c $(MODNAME).c -o $(MODNAME).o

View File

@ -395,7 +395,9 @@ SWITCH_DECLARE(switch_channel_state) switch_channel_set_state(switch_channel *ch
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "%s State Change %s -> %s\n", channel->name,
state_names[last_state], state_names[state]);
channel->state = state;
switch_core_session_signal_state_change(channel->session);
if (state < CS_DONE) {
switch_core_session_signal_state_change(channel->session);
}
} else {
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "%s Invalid State Change %s -> %s\n", channel->name,
state_names[last_state], state_names[state]);
@ -560,6 +562,7 @@ SWITCH_DECLARE(switch_status) switch_channel_hangup(switch_channel *channel)
if (channel->state < CS_HANGUP) {
channel->times.hungup = switch_time_now();
channel->state = CS_HANGUP;
switch_core_session_kill_channel(channel->session, SWITCH_SIG_KILL);
switch_core_session_signal_state_change(channel->session);
}
return channel->state;

View File

@ -1723,13 +1723,13 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
switch (state) {
case CS_NEW: /* Just created, Waiting for first instructions */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State NEW\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State NEW\n", switch_channel_get_name(session->channel));
break;
case CS_DONE:
continue;
break;
case CS_HANGUP: /* Deactivate and end the thread */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State HANGUP\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State HANGUP\n", switch_channel_get_name(session->channel));
if (!driver_state_handler->on_hangup ||
(driver_state_handler->on_hangup &&
driver_state_handler->on_hangup(session) == SWITCH_STATUS_SUCCESS &&
@ -1768,7 +1768,7 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
midstate = switch_channel_get_state(session->channel);
break;
case CS_INIT: /* Basic setup tasks */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State INIT\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State INIT\n", switch_channel_get_name(session->channel));
if (!driver_state_handler->on_init ||
(driver_state_handler->on_init &&
driver_state_handler->on_init(session) == SWITCH_STATUS_SUCCESS &&
@ -1804,7 +1804,7 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
}
break;
case CS_RING: /* Look for a dialplan and find something to do */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State RING\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State RING\n", switch_channel_get_name(session->channel));
if (!driver_state_handler->on_ring ||
(driver_state_handler->on_ring &&
driver_state_handler->on_ring(session) == SWITCH_STATUS_SUCCESS &&
@ -1840,7 +1840,7 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
}
break;
case CS_EXECUTE: /* Execute an Operation */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State EXECUTE\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State EXECUTE\n", switch_channel_get_name(session->channel));
if (!driver_state_handler->on_execute ||
(driver_state_handler->on_execute &&
driver_state_handler->on_execute(session) == SWITCH_STATUS_SUCCESS &&
@ -1876,7 +1876,7 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
}
break;
case CS_LOOPBACK: /* loop all data back to source */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State LOOPBACK\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State LOOPBACK\n", switch_channel_get_name(session->channel));
if (!driver_state_handler->on_loopback ||
(driver_state_handler->on_loopback &&
driver_state_handler->on_loopback(session) == SWITCH_STATUS_SUCCESS &&
@ -1912,7 +1912,7 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
}
break;
case CS_TRANSMIT: /* send/recieve data to/from another channel */
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "State TRANSMIT\n");
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "(%s) State TRANSMIT\n", switch_channel_get_name(session->channel));
if (!driver_state_handler->on_transmit ||
(driver_state_handler->on_transmit &&
driver_state_handler->on_transmit(session) == SWITCH_STATUS_SUCCESS &&
@ -1957,12 +1957,11 @@ SWITCH_DECLARE(void) switch_core_session_run(switch_core_session *session)
laststate = midstate;
}
if (state < CS_DONE && midstate == switch_channel_get_state(session->channel)) {
switch_thread_cond_wait(session->cond, session->mutex);
}
}
session->thread_running = 0;
}
@ -2071,9 +2070,8 @@ static void *SWITCH_THREAD_FUNC switch_core_session_thread(switch_thread *thread
switch_core_hash_insert(runtime.session_table, session->uuid_str, session);
switch_core_session_run(session);
switch_core_hash_delete(runtime.session_table, session->uuid_str);
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Session %ld (%s) Ended\n", id, switch_channel_get_name(session->channel));
switch_core_session_destroy(&session);
switch_console_printf(SWITCH_CHANNEL_CONSOLE, "Session %ld Ended\n", id);
return NULL;
}