Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.20;
Скачать: CL | DM;

Вниз

Ребята помогите разобраться с переводом с С++ в Делфи   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.04 c
4-1146397145
zaN0za
2006-04-30 15:39
2006.08.20
Вопрос по потокам


15-1153508462
Furyz-dimodim
2006-07-21 23:01
2006.08.20
Домашний сервер


2-1154597818
Jimmy
2006-08-03 13:36
2006.08.20
Ошибка при открытии файла.


1-1152077296
dreamse
2006-07-05 09:28
2006.08.20
Как вытащить дату из строки типа 03.07.06_17.-32-.21.txt


15-1153908559
Virgo_Style
2006-07-26 14:09
2006.08.20
проблема с Mass Storage Device (драйвера?)