Форум: "Прочее";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
ВнизРебята помогите разобраться с переводом с С++ в Делфи Найти похожие ветки
← →
Zilog_ © (2006-07-24 18:08) [0]Полный код файла:
/*
* iaxclient: a cross-platform IAX softphone library
*
* Copyrights:
* Copyright (C) 2003 HorizonLive.com, (c) 2004, Horizon Wimba, Inc.
*
* Contributors:
* Steve Kann <stevek@stevek.com>
*
* This program is free software, distributed under the terms of
* the GNU Lesser (Library) General Public License
*/
#ifndef _iaxclient_h
#define _iaxclient_h
#ifdef __cplusplus
extern "C" {
#endif
/* This is the include file which declared all external API functions to
* IAXCLIENT. It should include all functions and declarations needed
* by IAXCLIENT library users, but not include internal structures, or
* require the inclusion of library internals (or sub-libraries) */
#include <stdio.h>
#ifdef WIN32
#include <windows.h>
#include <winsock.h>
#else
#include <sys/socket.h>
#endif
#ifdef BUILDING_DLL
# ifdef WIN32
# define EXPORT __stdcall __declspec(dllexport)
# else
# define EXPORT
# endif
#else
# define EXPORT
#endif
#ifdef WIN32
#if defined(_MSC_VER)
typedef int (__stdcall *iaxc_sendto_t)(SOCKET, const char *, int, int, const struct sockaddr *, int);
typedef int (__stdcall *iaxc_recvfrom_t)(SOCKET, char *, int, int, struct sockaddr *, int *);
#else
typedef int PASCAL (*iaxc_sendto_t)(SOCKET, const char *, int, int, const struct sockaddr *, int);
typedef int PASCAL (*iaxc_recvfrom_t)(SOCKET, char *buf, int len, int flags, struct sockaddr *from, int *fromlen);
#endif
#else
typedef int (*iaxc_sendto_t)(int, const void *, size_t, int, const struct sockaddr *, socklen_t);
typedef int (*iaxc_recvfrom_t)(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
#endif
/* Define audio type constants */
#define AUDIO_INTERNAL 0
#define AUDIO_INTERNAL_PA 1
#define AUDIO_INTERNAL_FILE 2
#define AUDIO_EXTERNAL 99
/* payload formats : WARNING: must match libiax values!!! */
/* Data formats for capabilities and frames alike */
#define IAXC_FORMAT_G723_1 (1 << 0) /* G.723.1 compression */
#define IAXC_FORMAT_GSM (1 << 1) /* GSM compression */
#define IAXC_FORMAT_ULAW (1 << 2) /* Raw mu-law data (G.711) */
#define IAXC_FORMAT_ALAW (1 << 3) /* Raw A-law data (G.711) */
#define IAXC_FORMAT_G726 (1 << 4) /* ADPCM, 32kbps */
#define IAXC_FORMAT_ADPCM (1 << 5) /* ADPCM IMA */
#define IAXC_FORMAT_SLINEAR (1 << 6) /* Raw 16-bit Signed Linear (8000 Hz) PCM */
#define IAXC_FORMAT_LPC10 (1 << 7) /* LPC10, 180 samples/frame */
#define IAXC_FORMAT_G729A (1 << 8) /* G.729a Audio */
#define IAXC_FORMAT_SPEEX (1 << 9) /* Speex Audio */
#define IAXC_FORMAT_ILBC (1 << 10) /* iLBC Audio */
#define IAXC_FORMAT_MAX_AUDIO (1 << 15) /* Maximum audio format */
#define IAXC_FORMAT_JPEG (1 << 16) /* JPEG Images */
#define IAXC_FORMAT_PNG (1 << 17) /* PNG Images */
#define IAXC_FORMAT_H261 (1 << 18) /* H.261 Video */
#define IAXC_FORMAT_H263 (1 << 19) /* H.263 Video */
#define IAXC_FORMAT_H263_PLUS (1 << 20) /* H.263+ Video */
#define IAXC_FORMAT_MPEG4 (1 << 21) /* MPEG4 Video */
#define IAXC_FORMAT_H264 (1 << 23) /* H264 Video */
#define IAXC_FORMAT_THEORA (1 << 24) /* Theora Video */
#define IAXC_EVENT_TEXT 1
#define IAXC_EVENT_LEVELS 2
#define IAXC_EVENT_STATE 3
#define IAXC_EVENT_NETSTAT 4
#define IAXC_EVENT_URL 5 /* URL push via IAX(2) */
#define IAXC_EVENT_VIDEO 6 /* video data (pointer) */
#define IAXC_EVENT_REGISTRATION 7
#define IAXC_CALL_STATE_FREE 0
#define IAXC_CALL_STATE_ACTIVE (1<<1)
#define IAXC_CALL_STATE_OUTGOING (1<<2)
#define IAXC_CALL_STATE_RINGING (1<<3)
#define IAXC_CALL_STATE_COMPLETE (1<<4)
#define IAXC_CALL_STATE_SELECTED (1<<5)
#define IAXC_CALL_STATE_BUSY (1<<6)
#define IAXC_CALL_STATE_TRANSFER (1<<7)
#define IAXC_TEXT_TYPE_STATUS 1
#define IAXC_TEXT_TYPE_NOTICE 2
#define IAXC_TEXT_TYPE_ERROR 3
/* FATAL ERROR: User Agent should probably display error, then die. */
#define IAXC_TEXT_TYPE_FATALERROR 4
#define IAXC_TEXT_TYPE_IAX 5
/* registration replys, corresponding to IAX_EVENTs*/
#define IAXC_REGISTRATION_REPLY_ACK 18 /* IAX_EVENT_REGACC */
#define IAXC_REGISTRATION_REPLY_REJ 30 /* IAX_EVENT_REGREJ */
#define IAXC_REGISTRATION_REPLY_TIMEOUT 6 /* IAX_EVENT_TIMEOUT */
#define IAXC_URL_URL 1 /* URL received */
#define IAXC_URL_LDCOMPLETE 2 /* URL loading complete */
#define IAXC_URL_LINKURL 3 /* URL link request */
#define IAXC_URL_LINKREJECT 4 /* URL link reject */
#define IAXC_URL_UNLINK 5 /* URL unlink */
#define IAXC_EVENT_BUFSIZ 256
struct iaxc_ev_levels {
float input;
float output;
};
struct iaxc_ev_text {
int type;
int callNo; /* call number for IAX text */
char message[IAXC_EVENT_BUFSIZ];
};
struct iaxc_ev_call_state {
int callNo;
int state;
int format;
char remote[IAXC_EVENT_BUFSIZ];
char remote_name[IAXC_EVENT_BUFSIZ];
char local[IAXC_EVENT_BUFSIZ];
char local_context[IAXC_EVENT_BUFSIZ];
};
struct iaxc_netstat {
int jitter;
int losspct;
int losscnt;
int packets;
int delay;
int dropped;
int ooo;
};
struct iaxc_ev_netstats {
int callNo;
int rtt;
struct iaxc_netstat local;
struct iaxc_netstat remote;
};
struct iaxc_ev_url {
int callNo;
int type;
char url[IAXC_EVENT_BUFSIZ];
};
struct iaxc_ev_video {
int callNo;
int format;
int width;
int height;
unsigned char *data;
};
struct iaxc_ev_registration {
int id;
int reply;
int msgcount;
};
← →
Zilog_ © (2006-07-24 18:08) [1]
typedef struct iaxc_event_struct {
struct iaxc_event_struct *next;
int type;
union {
struct iaxc_ev_levels levels;
struct iaxc_ev_text text;
struct iaxc_ev_call_state call;
struct iaxc_ev_netstats netstats;
struct iaxc_ev_url url;
struct iaxc_ev_video video;
struct iaxc_ev_registration reg;
} ev;
} iaxc_event;
typedef int (*iaxc_event_callback_t)(iaxc_event e);
EXPORT void iaxc_set_event_callback(iaxc_event_callback_t func);
/* Sets iaxclient to post a pointer to a copy of event using o/s specific Post method */
EXPORT int iaxc_set_event_callpost(void *handle, int id);
/* frees event delivered via o/s specific Post method */
EXPORT void iaxc_free_event(iaxc_event *e);
/* Event Accessors */
EXPORT struct iaxc_ev_levels *iaxc_get_event_levels(iaxc_event *e);
EXPORT struct iaxc_ev_text *iaxc_get_event_text(iaxc_event *e);
EXPORT struct iaxc_ev_call_state *iaxc_get_event_state(iaxc_event *e);
EXPORT int iaxc_initialize(int audType, int nCalls);
EXPORT void iaxc_shutdown();
EXPORT void iaxc_set_formats(int preferred, int allowed);
EXPORT void iaxc_set_min_outgoing_framesize(int samples);
EXPORT void iaxc_set_callerid(char *name, char *number);
EXPORT void iaxc_process_calls();
EXPORT int iaxc_service_audio();
EXPORT int iaxc_start_processing_thread();
EXPORT int iaxc_stop_processing_thread();
EXPORT void iaxc_call(char *num);
EXPORT int iaxc_unregister( int id );
EXPORT int iaxc_register(char *user, char *pass, char *host);
EXPORT void iaxc_answer_call(int callNo);
EXPORT void iaxc_blind_transfer_call(int callNo, char *number);
EXPORT void iaxc_dump_all_calls(void);
EXPORT void iaxc_dump_call(void);
EXPORT void iaxc_reject_call(void);
EXPORT void iaxc_reject_call_number(int callNo);
EXPORT void iaxc_send_dtmf(char digit);
EXPORT void iaxc_send_text(char *text);
EXPORT void iaxc_send_url(char *url, int link); /* link == 1 ? AST_HTML_LINKURL : AST_HTML_URL */
EXPORT int iaxc_was_call_answered();
EXPORT void iaxc_millisleep(long ms);
EXPORT void iaxc_set_silence_threshold(double thr);
EXPORT void iaxc_set_audio_output(int mode);
EXPORT int iaxc_select_call(int callNo);
EXPORT int iaxc_first_free_call();
EXPORT int iaxc_selected_call();
EXPORT int iaxc_quelch(int callNo, int MOH);
EXPORT int iaxc_unquelch(int call);
EXPORT int iaxc_mic_boost_get( void ) ;
EXPORT int iaxc_mic_boost_set( int enable ) ;
EXPORT char* iaxc_version(char *ver);
/* application-defined networking; give substiture sendto and recvfrom functions,
* must be called before iaxc_initialize! */
EXPORT void iaxc_set_networking(iaxc_sendto_t st, iaxc_recvfrom_t rf) ;
/* wrapper for libiax2 get_netstats */
EXPORT int iaxc_get_netstats(int call, int *rtt, struct iaxc_netstat *local, struct iaxc_netstat *remote);
#define IAXC_AD_INPUT (1<<0)
#define IAXC_AD_OUTPUT (1<<1)
#define IAXC_AD_RING (1<<2)
#define IAXC_AD_INPUT_DEFAULT (1<<3)
#define IAXC_AD_OUTPUT_DEFAULT (1<<4)
#define IAXC_AD_RING_DEFAULT (1<<5)
struct iaxc_audio_device {
char *name; /* name of the device */
long capabilities; /* flags, defined above */
int devID; /* driver-specific ID */
};
/* Get audio device information:
* **devs: a pointer to an array of device structures, as declared above. function
* will give you a pointer to the proper array, which will be valid as long as iaxc is
* initialized.
*
* *nDevs: a pointer to an int, to which the count of devices in the array devs will be
* written
*
* *input, *output, *ring: the currently selected devices for input, output, ring will
* be written to the int pointed to by these pointers.
*/
EXPORT int iaxc_audio_devices_get(struct iaxc_audio_device **devs, int *nDevs, int *input, int *output, int *ring);
EXPORT int iaxc_audio_devices_set(int input, int output, int ring);
EXPORT double iaxc_input_level_get();
EXPORT double iaxc_output_level_get();
EXPORT int iaxc_input_level_set(double level);
EXPORT int iaxc_output_level_set(double level);
struct iaxc_sound {
short *data; /* sound data */
long len; /* length of sample */
int malloced; /* should the library free() the data after it is played? */
int channel; /* 0 for outputSelected, 1 for ringSelected */
int repeat; /* number of times to repeat (-1 = infinite) */
long pos; /* internal use: current play position */
int id; /* internal use: sound ID */
struct iaxc_sound *next; /* internal use: next in list */
};
/* play a sound. sound = an iaxc_sound structure, ring: 0: play through output device; 1: play through "ring" device */
EXPORT int iaxc_play_sound(struct iaxc_sound *sound, int ring);
/* stop sound with ID "id" */
EXPORT int iaxc_stop_sound(int id);
#define IAXC_FILTER_DENOISE (1<<0)
#define IAXC_FILTER_AGC (1<<1)
#define IAXC_FILTER_ECHO (1<<2)
#define IAXC_FILTER_AAGC (1<<3) /* Analog (mixer-based) AGC */
#define IAXC_FILTER_CN (1<<4) /* Send CN frames when silence detected */
#define IAXC_FILTER_BASS_BOOST (1<<5) /* Enable Bass boost to the signal sent in the speakers */
EXPORT int iaxc_get_filters(void);
EXPORT void iaxc_set_filters(int filters);
EXPORT int iaxc_set_files(FILE *input, FILE *output);
/* speex specific codec settings */
/* a good choice is (1,-1,-1,0,8000,3): 8kbps ABR */
/* Decode options:
* decode_enhance: 1/0 perceptual enhancement for decoder
* quality: Generally, set either quality (0-9) or bitrate.
* -1 for "default"
* bitrate: in kbps. Applies to CBR only; -1 for default.
* (overrides "quality" for CBR mode)
* vbr: Variable bitrate mode: 0/1
* abr mode/rate: 0 for not ABR, bitrate for ABR mode
* complexity: algorithmic complexity. Think -N for gzip.
* Higher numbers take more CPU for better quality. 3 is
* default and good choice.
*/
EXPORT void iaxc_set_speex_settings(int decode_enhance, float quality, int bitrate, int vbr, int abr, int complexity);
/* set/get video mode */
#define IAXC_VIDEO_MODE_NONE 0 /* don"t send video at all */
#define IAXC_VIDEO_MODE_ACTIVE 1 /* send video */
#define IAXC_VIDEO_MODE_PREVIEW_RAW 2 /* send video, and show raw preview */
#define IAXC_VIDEO_MODE_PREVIEW_ENCODED 3 /* send video, and show encoded preview */
EXPORT int iaxc_video_mode_set(int mode);
EXPORT int iaxc_video_mode_get();
/* set allowed/preferred video encodings */
EXPORT void iaxc_video_format_set(int preferred, int allowed, int framerate, int bitrate, int width, int height);
#ifdef __cplusplus
}
#endif
#endif
← →
Reindeer Moss Eater © (2006-07-24 18:10) [2]c2pas.exe
← →
Zilog_ © (2006-07-24 18:14) [3]Пытался тупо по функциям описать и вызвать их: работает но частично ....
function iaxc_initialize(audType, nCalls:integer): HResult; stdcall external "iaxclient.dll";
function iaxc_register(user:Pchar; pass:Pchar; host:PChar): HResult; stdcall external "iaxclient.dll";
function iaxc_unregister( id:integer ): HResult; stdcall external "iaxclient.dll";
function iaxc_audio_devices_set(input, output, ring:integer): HResult; stdcall external "iaxclient.dll";
function iaxc_start_processing_thread: HResult; stdcall external "iaxclient.dll";
function iaxc_input_level_get():double; stdcall external "iaxclient.dll";
function iaxc_output_level_get():double; stdcall external "iaxclient.dll";
//function iaxc_version(Ver:Pchar):Pchar; stdcall external "iaxclient.dll";
function iaxc_get_netstats(call:integer; rtp:integer; local:pointer; remote:pointer): HResult; stdcall external "iaxclient.dll";
procedure iaxc_answer_call(callNo:integer ); stdcall external "iaxclient.dll";
procedure iaxc_call(num:Pchar); stdcall external "iaxclient.dll";
procedure iaxc_set_callerid(name, number:Pchar); stdcall external "iaxclient.dll";
procedure iaxc_set_event_callback(iaxc_event_callback_t:TEvents); stdcall external "iaxclient.dll";
procedure iaxc_set_formats(preferred, allowed:integer); stdcall external "iaxclient.dll";
procedure iaxc_set_filters(filters:integer); stdcall external "iaxclient.dll";
procedure iaxc_set_silence_threshold(thr:double); stdcall external "iaxclient.dll";
procedure iaxc_set_audio_output(mode:integer); stdcall external "iaxclient.dll";
procedure iaxc_process_calls; stdcall external "iaxclient.dll";
procedure iaxc_set_networking(iaxc_sendto_t:pointer; iaxc_recvfrom_t:pointer) ; stdcall external "iaxclient.dll";
procedure iaxc_set_speex_settings(decode_enhance:integer; quality:real; bitrate:integer; vbr:integer; abr:integer; complexity:integer) ; stdcall external "iaxclient.dll";
....
procedure TForm1.FormCreate(Sender: TObject);
var
result:integer;
begin
result:=iaxc_initialize(0, 10);
if result=-1 then
begin
ShowMessage ("Error Initialize!");
exit;
end;
result:=iaxc_start_processing_thread;
ShowMessage (IntToStr(result));
iaxc_set_event_callback(event);
iaxc_set_formats (1, 1);
result:=iaxc_audio_devices_set(0,0,0);
ShowMessage (IntToStr(result));
iaxc_set_speex_settings(1,-1,-1,0,8000,3);
result:=iaxc_register("3002", "", "10.0.0.112");
ShowMessage (IntToStr(result));
iaxc_set_callerid("zilog", "3435343031");
iaxc_process_calls;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
iaxc_set_callerid("1", "3002");
iaxc_set_formats(1,1);
iaxc_set_filters(1);
iaxc_set_silence_threshold(-99);
iaxc_audio_devices_set(1,1,1);
iaxc_set_audio_output(0);
iaxc_call(pChar(edit1.text));
end;
Теоретически должен позвонить абоненту, а не звонит. Хотя регистрация на сервере проходит успешно...
Кроме-того, есть программа использующаяя эту ДЛЛ и она полностью работоспособна...
← →
Zilog_ © (2006-07-24 18:19) [4]
> Reindeer Moss Eater © (24.07.06 18:10) [2]
> c2pas.exe
Не все так просто, он зара не переваривает его ... получается абракадабра ...
Ребята, сочтемся ... готов в пределах разумного ...
← →
REA (2006-07-25 11:01) [5]А почему на форум? Лучше в телефонную компанию обратиться, которая таким софтом занимается.
← →
Zilog_ © (2006-07-25 11:11) [6]Ну вопервых для курсача, который потом засичать придется.
А во вторых вроде с помощью форума почти додел!!!
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c