-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathphonecall.h
168 lines (117 loc) · 4.09 KB
/
phonecall.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
/*
PhoneCall.cpp, part of bv-tapi a SIP-TAPI bridge.
Copyright (C) 2011 Nick Knight
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 3 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, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifndef PHONE_CALL
#define PHONE_CALL
#include <string>
#include <list>
class tapi_info
{
public:
tapi_info(HTAPILINE ourLine, HTAPICALL tapiCall, LINEEVENT lineEvent)
{
this->ourLine = ourLine;
this->tapiCall = tapiCall;
this->lineEvent = lineEvent;
}
LINEEVENT get_line_event(void){ return this->lineEvent; }
HTAPILINE get_line(void) { return this->ourLine; }
HTAPICALL get_call(void) { return this->tapiCall; }
private:
// Variables required for TSPI
HTAPILINE ourLine;
// TAPI's ID to the call
HTAPICALL tapiCall;
// The line event to call back
LINEEVENT lineEvent;
};
typedef std::list<tapi_info> tapi_info_list;
class PhoneCall
{
public:
PhoneCall(void);
void init(std::string CallID, std::string identity);
void PhoneCall::init(std::string CallID, std::string identity, HTAPICALL call);
~PhoneCall(void);
void UpdateState(std::string identity,
std::string dialog_id,
std::string direction,
std::string state,
std::string remote_display,
std::string remote_identity);
void setCalledID(std::string calledID) { this->calledID = calledID; }
void setCallID(std::string callID) { this->CallID = callID; }
// What we currently support - maybe more to come...
std::string getCallerID(void) { return this->callerID; }
std::string getCallerIDName(void) { return this->callerName; }
std::string getCalledID(void) { return this->calledID; }
std::string getCalledIDName(void) { return ""; }
std::string getConnectedID(void) { return ""; }
std::string getConnectedIDName(void) { return ""; }
inline int getUID(void) { return this->uid; }
void markAsRefered(std::string identity, std::string calledID, HTAPICALL hcall);
bool isRefered(void);
DWORD getOrigin(void);
DWORD getCurrentTapiState(void) { return this->CurrentTapiState; }
SYSTEMTIME GetCurrentStateTime(void) { return this->CurrentStateTime;}
void lineEvent(DWORD, DWORD_PTR, DWORD_PTR, DWORD_PTR);
// Send signals to TAPI
void signalTapiNewCall(void);
void signalTapiDialtone(void);
void signalTapiDialing(void);
void signalTapiProceeding(void);
void signalTapiOffering(void);
void signalTapiRinging(void);
void signalTapiConnected(void);
void signalTapiIdle(void);
// Updates the state to TAPI
void signalTapiCallerID(void);
void signalTapiCalledID(void);
time_t getCallAge(void);
inline std::string getCallID(void) { return this->CallID; }
private:
tapi_info_list tapi;
std::string identity;
std::string callerID;
std::string callerName;
std::string calledID;
int ringCount;
std::string lastState;
time_t callCreation;
// This is the unique ID of the call according to our server.
std::string CallID;
bool refered;
bool newcallSignalled;
bool dialtoneSignalled;
bool connectedSignalled;
bool dialingSignaled;
bool proceedingSignaled;
bool offeringSignaled;
bool ringingSignaled;
bool idleSignaled;
// unique id to convert to HDRV...
int uid;
DWORD Origin;
DWORD CurrentTapiState;
SYSTEMTIME CurrentStateTime;
};
// Global functions
bool OriginateCall(std::string CalledID, HTAPICALL htCall, LPHDRVCALL tspiID);
void UpdateCallState(std::string CallID, std::string State, std::string CalledID, std::string CallerID, std::string CallerIDName);
void CheckForTimeouts(void);
PhoneCall* GetPhoneCall(HDRVCALL tspiCall);
void RemovePhoneCall(PhoneCall *ourCall);
void FiniPhoneCalls(void);
#endif