Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
3-1150018686
cosmos
2006-06-11 13:38
2006.08.20
Как физически удалить записи из dbf?


3-1150311423
Itonixxx
2006-06-14 22:57
2006.08.20
Построитель запросов


15-1153391517
Vlad
2006-07-20 14:31
2006.08.20
Ваша гражданская позиция (небольшой опрос)


1-1151996902
JohnKorsh
2006-07-04 11:08
2006.08.20
Измерение интервалов, меньших 1 mS.


2-1154428209
DelphiLexx
2006-08-01 14:30
2006.08.20
external без описания имени модуля





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский