iaxvoiplink.h 4.2 KB
Newer Older
yanmorin's avatar
 
yanmorin committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
 *  Copyright (C) 2006 Savoir-Faire Linux inc.
 *  Author: Yan Morin <yan.morin@savoirfairelinux.com>
 *                                                                              
 *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
#ifndef IAXVOIPLINK_H
#define IAXVOIPLINK_H

#include "voIPLink.h"
23
#include <iax-client.h>
24
#include "global.h"
yanmorin's avatar
 
yanmorin committed
25

26

27
28
class EventThread;
class IAXCall;
yanmorin's avatar
 
yanmorin committed
29

30
31
32
33
class AudioCodec;
class AudioLayer;

 
yanmorin's avatar
 
yanmorin committed
34
/**
yanmorin's avatar
   
yanmorin committed
35
36
37
38
 * VoIPLink contains a thread that listen to external events 
 * and contains IAX Call related functions
 * @author Yan Morin <yan.morin@gmail.com>
 */
yanmorin's avatar
 
yanmorin committed
39
40
41
42
43
44
45
class IAXVoIPLink : public VoIPLink
{
public:
    IAXVoIPLink(const AccountID& accountID);

    ~IAXVoIPLink();

46
  void getEvent(void);
yanmorin's avatar
   
yanmorin committed
47
  bool init (void);
yanmorin's avatar
 
yanmorin committed
48
  bool checkNetwork (void) { return false; }
yanmorin's avatar
   
yanmorin committed
49
  void terminate (void);
yanmorin's avatar
 
yanmorin committed
50

51
52
  bool setRegister (void);
  bool setUnregister (void);
yanmorin's avatar
 
yanmorin committed
53

54
  Call* newOutgoingCall(const CallID& id, const std::string& toUrl);
55
  bool answer(const CallID& id);
yanmorin's avatar
 
yanmorin committed
56

yanmorin's avatar
yanmorin committed
57
  bool hangup(const CallID& id);
yanmorin's avatar
 
yanmorin committed
58
  bool cancel(const CallID& id) { return false; }
59
60
  bool onhold(const CallID& id);
  bool offhold(const CallID& id);
61
62
63
  bool transfer(const CallID& id, const std::string& to);
  bool refuse (const CallID& id);
  bool carryingDTMFdigits(const CallID& id, char code);
yanmorin's avatar
 
yanmorin committed
64
  bool sendMessage(const std::string& to, const std::string& body) { return false; }
65

yanmorin's avatar
yanmorin committed
66
67
68
69
70
public: // iaxvoiplink only
  void setHost(const std::string& host) { _host = host; }
  void setUser(const std::string& user) { _user = user; }
  void setPass(const std::string& pass) { _pass = pass; }

71
72
private:
  /**
yanmorin's avatar
yanmorin committed
73
74
75
76
77
78
   * Get IAX Call from an id
   * @param id CallId
   * @return IAXCall pointer or 0
   */
  IAXCall* getIAXCall(const CallID& id);

79
80
81
82
83
84
  /**
   * Delete every call 
   */
  void terminateIAXCall();

  /**
85
86
87
88
   * Find a iaxcall by iax session number
   * @param session an iax_session valid pointer
   * @return iaxcall or 0 if not found
   */
yanmorin's avatar
yanmorin committed
89
  IAXCall* iaxFindCallBySession(struct iax_session* session);
90
91
92
93
94
95
96
97

  /**
   * Handle IAX Event for a call
   * @param event An iax_event pointer
   * @param call  An IAXCall pointer 
   */
  void iaxHandleCallEvent(iax_event* event, IAXCall* call);

yanmorin's avatar
yanmorin committed
98
99
100
101
102
  /**
   * Handle IAX Registration Reply event
   * @param event An iax_event pointer
   */
  void iaxHandleRegReply(iax_event* event);
103

104
105
106
107
108
  /**
   * Send an outgoing call invite to iax
   */
  bool iaxOutgoingInvite(IAXCall* Call);

109
  EventThread* _evThread;
yanmorin's avatar
yanmorin committed
110
  /** registration session : 0 if not register */
yanmorin's avatar
yanmorin committed
111
  struct iax_session* _regSession;
yanmorin's avatar
yanmorin committed
112
113
114
115
116
117
118

  /** IAX Host */
  std::string _host;
  /** IAX User */
  std::string _user;
  /** IAX Password */
  std::string _pass;
119
120

  ost::Mutex _mutexIAX;
121
122
123
124

 // extra pointer / not dynamic yet
  AudioCodec* audiocodec;
  AudioLayer* audiolayer;
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141

  /** When we receive data, we decode it inside this buffer */
  int16* _receiveDataDecoded;
  /** When we send data, we encode it inside this buffer*/
  unsigned char* _sendDataEncoded;

  /** After that we send the data inside this buffer if there is a format conversion or rate conversion */
  /** Also use for getting mic-ringbuffer data */
  SFLDataFormat* _dataAudioLayer;

  /** Buffer for 8000hz samples in conversion */
  float32* _floatBuffer8000;
  /** Buffer for 48000hz samples in conversion */ 
  float32* _floatBuffer48000;

  /** Buffer for 8000hz samples for mic conversion */
  int16* _intBuffer8000;
yanmorin's avatar
yanmorin committed
142
143
144

  /** Current IAX call pointer, used for sending, change when starting audio, switching */
  IAXCall* _currentCall; 
yanmorin's avatar
 
yanmorin committed
145
146
147
};

#endif