iaxvoiplink.h 3.37 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>
yanmorin's avatar
 
yanmorin committed
24

25
26
class EventThread;
class IAXCall;
yanmorin's avatar
 
yanmorin committed
27
28

/**
yanmorin's avatar
   
yanmorin committed
29
30
31
32
 * 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
33
34
35
36
37
38
39
class IAXVoIPLink : public VoIPLink
{
public:
    IAXVoIPLink(const AccountID& accountID);

    ~IAXVoIPLink();

40
  void getEvent(void);
yanmorin's avatar
   
yanmorin committed
41
  bool init (void);
yanmorin's avatar
 
yanmorin committed
42
  bool checkNetwork (void) { return false; }
yanmorin's avatar
   
yanmorin committed
43
  void terminate (void);
yanmorin's avatar
 
yanmorin committed
44

45
46
  bool setRegister (void);
  bool setUnregister (void);
yanmorin's avatar
 
yanmorin committed
47

48
  Call* newOutgoingCall(const CallID& id, const std::string& toUrl);
yanmorin's avatar
 
yanmorin committed
49
50
  bool answer(const CallID& id) {return false;}

yanmorin's avatar
yanmorin committed
51
  bool hangup(const CallID& id);
yanmorin's avatar
 
yanmorin committed
52
53
54
55
56
57
58
  bool cancel(const CallID& id) { return false; }
  bool onhold(const CallID& id) { return false; }
  bool offhold(const CallID& id) { return false; }
  bool transfer(const CallID& id, const std::string& to) { return false; }
  bool refuse (const CallID& id) { return false; }
  bool carryingDTMFdigits(const CallID& id, char code) { return false; }
  bool sendMessage(const std::string& to, const std::string& body) { return false; }
59

yanmorin's avatar
yanmorin committed
60
61
62
63
64
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; }

65
66
private:
  /**
yanmorin's avatar
yanmorin committed
67
68
69
70
71
72
73
   * Get IAX Call from an id
   * @param id CallId
   * @return IAXCall pointer or 0
   */
  IAXCall* getIAXCall(const CallID& id);

  /*
74
75
76
77
   * 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
78
  IAXCall* iaxFindCallBySession(struct iax_session* session);
79
80
81
82
83
84
85
86

  /**
   * 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
87
88
89
90
91
  /**
   * Handle IAX Registration Reply event
   * @param event An iax_event pointer
   */
  void iaxHandleRegReply(iax_event* event);
92

93
94
95
96
97
  /**
   * Send an outgoing call invite to iax
   */
  bool iaxOutgoingInvite(IAXCall* Call);

98
  EventThread* _evThread;
yanmorin's avatar
yanmorin committed
99
  /** registration session : 0 if not register */
yanmorin's avatar
yanmorin committed
100
  struct iax_session* _regSession;
yanmorin's avatar
yanmorin committed
101
102
103
104
105
106
107

  /** IAX Host */
  std::string _host;
  /** IAX User */
  std::string _user;
  /** IAX Password */
  std::string _pass;
108
109

  ost::Mutex _mutexIAX;
yanmorin's avatar
 
yanmorin committed
110
111
112
};

#endif