d60ce5f78695147c23be4ae635a2c650c69f9538
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #ifndef BLINKER_PHONE_IMPL_H
7) #define BLINKER_PHONE_IMPL_H
8) 
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

9) #include <map>
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

10) #include <sstream>
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

11) #include <string>
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

12) #include <vector>
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

13) 
14) #include "Directory.h"
15) #include "File.h"
16) #include "IoCallee.h"
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

17) #include "ListTracker.h"
18) #include "ListTracker_impl.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

19) #include "Mgrs.h"
20) #include "Module.h"
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

21) #include "OpConn.h"
22) #include "OpConnIf.h"
23) #include "OpMgr.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

24) #include "Phone.h"
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

25) #include "PhoneExtension.h"
26) #include "PhoneExtension_impl.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

27) #include "SettingFile.h"
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

28) #include "StringParser.h"
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

29) #include "Time.h"
30) #include "TimeCallee.h"
31) 
32) namespace Blinker {
33) 
34) /**
35)  * @brief constructor
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

36)  * @param[in] name module name
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

37)  * @param[in] mgrs managers
38)  * @param[in] dirBase base directory
39)  */
40) template<typename ADDR, typename SOCK>
Stefan Schuermans make modules know their name

Stefan Schuermans authored 12 years ago

41) Phone<ADDR, SOCK>::Phone(const std::string &name, Mgrs &mgrs,
42)                          const Directory &dirBase):
43)   Module(name, mgrs, dirBase),
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

44)   m_fileBind(dirBase.getFile("bind")),
45)   m_fileServer(dirBase.getFile("server")),
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

46)   m_extListTracker(*this, dirBase.getSubdir("extensions")),
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

47)   m_pSock(NULL)
48) {
49)   // read server address
50)   readServer();
51) 
52)   // create and bind socket
53)   createSock();
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

54) 
55)   // load extensions
56)   m_extListTracker.init();
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

57) }
58) 
59) /// virtual destructor
60) template<typename ADDR, typename SOCK>
61) Phone<ADDR, SOCK>::~Phone()
62) {
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

63)   // unload extensions
64)   m_extListTracker.clear();
65) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

66)   // close all connections
67)   while (!m_connLineMap.empty()) {
68)     ConnLineMap::iterator it = m_connLineMap.begin();
69)     it->first->close();
70)     sendHangup(it->second);
71)     m_connLineMap.erase(it);
72)   }
73) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

74)   // destroy socket
75)   destroySock();
76) 
77)   // cancel time callback
78)   m_mgrs.m_callMgr.cancelTimeCall(this);
79) }
80) 
81) /// check for update of configuration
82) template<typename ADDR, typename SOCK>
83) void Phone<ADDR, SOCK>::updateConfig()
84) {
85)   // bind address file was modified -> re-create socket
86)   if (m_fileBind.checkModified()) {
87)     destroySock();
88)     createSock();
89)   }
90) 
91)   // server address file was modified -> re-read server address
92)   if (m_fileServer.checkModified())
93)     readServer();
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

94) 
95)   // extensions update
96)   m_extListTracker.updateConfig();
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

97) }
98) 
99) /// callback when requested time reached
100) template<typename ADDR, typename SOCK>
101) void Phone<ADDR, SOCK>::timeCall()
102) {
103)   Time now = Time::now();
104) 
105)   // server timeout -> re-register
106)   if (m_timeRegister <= now)
107)     sendRegister();
108) 
109)   // send heartbeat
110)   if (m_timeHeartbeat <= now)
111)     sendHeartbeat();
112) }
113) 
114) /**
115)  * @brief callback when I/O object is readable
116)  * @param[in] io I/O object that is readable
117)  */
118) template<typename ADDR, typename SOCK>
119) void Phone<ADDR, SOCK>::ioReadCall(Io *io)
120) {
121)   // reception on socket
122)   if (io == m_pSock)
123)     receiveFromSock();
124) }
125) 
126) /**
127)  * @brief callback when I/O object is writable
128)  * @param[in] io I/O object that is writable
129)  */
130) template<typename ADDR, typename SOCK>
131) void Phone<ADDR, SOCK>::ioWriteCall(Io *io)
132) {
133)   (void)io; // unused
134) }
135) 
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

136) /**
137)  * @brief key command received on operator connection
138)  * @param[in] pConn operator connection object
139)  * @param[in] key key that was pressed
140)  */
141) template<typename ADDR, typename SOCK>
142) void Phone<ADDR, SOCK>::opConnRecvKey(OpConn *pConn, char key)
143) {
144)   // the key command does not make sense in this direction, ignore it
145)   (void)pConn; // unused
146)   (void)key; // unused
147) }
148) 
149) /**
150)  * @brief play command received on operator connection
151)  * @param[in] pConn operator connection object
152)  * @param[in] sound name of sound to play
153)  */
154) template<typename ADDR, typename SOCK>
155) void Phone<ADDR, SOCK>::opConnRecvPlay(OpConn *pConn, const std::string &sound)
156) {
157)   // get phone line of connection
158)   unsigned int line;
159)   if (!conn2line(pConn, line))
160)     return;
161) 
162)   // send play message
163)   sendPlay(line, sound);
164) }
165) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

166) /**
167)  * @brief operator connection is closed
168)  * @param[in] pConn operator connection object
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

169)  *
170)  * The connection may not be used for sending any more in this callback.
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

171)  */
172) template<typename ADDR, typename SOCK>
173) void Phone<ADDR, SOCK>::opConnClose(OpConn *pConn)
174) {
175)   // get phone line of connection
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

176)   unsigned int line;
177)   if (!conn2line(pConn, line))
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

178)     return;
179) 
180)   // send hangup message
181)   sendHangup(line);
182) 
183)   // remove connection from maps
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

184)   m_connLineMap.erase(pConn);
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

185)   m_lineConnMap.erase(line);
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

186) 
187)   // remove command buffer for this line
188)   m_cmdBufMap.erase(line);
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

189) }
190) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

191) /// (re-)read server address
192) template<typename ADDR, typename SOCK>
193) void Phone<ADDR, SOCK>::readServer()
194) {
195)   m_fileServer.update();
196) 
197)   // register with new server
198)   sendRegister();
199) }
200) 
201) /// create socket and bind it
202) template<typename ADDR, typename SOCK>
203) void Phone<ADDR, SOCK>::createSock()
204) {
205)   // create socket
206)   if (!m_pSock) {
207)     m_pSock = new SOCK();
208)     if (!m_pSock)
209)       return;
210)   }
211) 
212)   // get bind address from bind address setting file
213)   m_fileBind.update();
214)   if (!m_fileBind.m_valid) {
215)     delete m_pSock;
216)     m_pSock = NULL;
217)     return;
218)   }
219) 
220)   // bind socket
221)   if (!m_pSock->bind(m_fileBind.m_obj)) {
222)     delete m_pSock;
223)     m_pSock = NULL;
224)     return;
225)   }
226) 
227)   // request callback on recepetion
228)   m_mgrs.m_callMgr.requestIoReadCall(this, m_pSock);
229) 
230)   // register with server
231)   sendRegister();
232) }
233) 
234) /// destroy socket
235) template<typename ADDR, typename SOCK>
236) void Phone<ADDR, SOCK>::destroySock()
237) {
238)   // cancel callback request
239)   m_mgrs.m_callMgr.cancelIoReadCall(this, m_pSock);
240) 
241)   // destroy socket
242)   if (m_pSock) {
243)     delete m_pSock;
244)     m_pSock = NULL;
245)   }
246) }
247) 
248) /// register with server
249) template<typename ADDR, typename SOCK>
250) void Phone<ADDR, SOCK>::sendRegister()
251) {
Stefan Schuermans register message contains p...

Stefan Schuermans authored 12 years ago

252)   ADDR addr;
253)   if (m_pSock)
254)     m_pSock->getAddr(addr);
255)   std::stringstream strm;
256)   strm << "register:" << addr.getPort();
257)   sendNow(0, strm.str());
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

258) 
259)   // set time for next register message and next heartbeat
BlinkenArea fix EBIP timeout and heartbeat

BlinkenArea authored 12 years ago

260)   Time now = Time::now();
261)   m_timeRegister = now + m_serverTimeout;
262)   m_timeHeartbeat = now + m_heartbeatInterval;
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

263)   updateTimeCallback();
264) }
265) 
266) /// send heartbeat to server
267) template<typename ADDR, typename SOCK>
268) void Phone<ADDR, SOCK>::sendHeartbeat()
269) {
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

270)   sendNow(0, "heartbeat");
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

271) 
272)   // set time for next heartbeat
273)   m_timeHeartbeat = Time::now() + m_heartbeatInterval;
274)   updateTimeCallback();
275) }
276) 
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

277) /**
278)  * @brief send play message
279)  * @param[in] line number of line to request play on
280)  * @param[in] sound name of sound to request
281)  */
282) template<typename ADDR, typename SOCK>
283) void Phone<ADDR, SOCK>::sendPlay(unsigned int line, const std::string &sound)
284) {
285)   std::stringstream strm;
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

286)   strm << "playbackground:" << sound;
287)   sendBuf(line, strm.str());
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

288) }
289) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

290) /**
291)  * @brief send hangup message
292)  * @param[in] line number of line to hangup
293)  */
294) template<typename ADDR, typename SOCK>
295) void Phone<ADDR, SOCK>::sendHangup(unsigned int line)
296) {
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

297)   sendNow(line, "hangup");
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

298) }
299) 
Stefan Schuermans accepting EBIP calls works now

Stefan Schuermans authored 12 years ago

300) /**
301)  * @brief send accept message
302)  * @param[in] line number of line accept on
303)  */
304) template<typename ADDR, typename SOCK>
305) void Phone<ADDR, SOCK>::sendAccept(unsigned int line)
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

306) {
307)   sendNow(line, "accept");
308) }
309) 
310) /**
311)  * @brief send message buffered to server
312)  * @param[in] line number of line to hangup
313)  * @param[in] msg message to send
314)  */
315) template<typename ADDR, typename SOCK>
316) void Phone<ADDR, SOCK>::sendBuf(unsigned int line, const std::string &msg)
317) {
318)   CmdBufMap::iterator itCmdBuf = m_cmdBufMap.find(line);
319)   // line not yet connected -> buffer command
320)   if (itCmdBuf != m_cmdBufMap.end())
321)     // buffer command
322)     itCmdBuf->second.push_back(msg);
323)   // line is connected -> send now
324)   else
325)     sendNow(line, msg);
326) }
327) 
328) /**
329)  * @brief send message to server now
330)  * @param[in] line number of line to hangup
331)  * @param[in] msg message to send
332)  */
333) template<typename ADDR, typename SOCK>
334) void Phone<ADDR, SOCK>::sendNow(unsigned int line, const std::string &msg)
Stefan Schuermans accepting EBIP calls works now

Stefan Schuermans authored 12 years ago

335) {
336)   std::stringstream strm;
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

337)   strm << line << ":" << msg;
338)   sendSock(strm.str());
Stefan Schuermans accepting EBIP calls works now

Stefan Schuermans authored 12 years ago

339) }
340) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

341) /**
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

342)  * @brief send message to socket
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

343)  * @param[in] msg message to send
344)  */
345) template<typename ADDR, typename SOCK>
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

346) void Phone<ADDR, SOCK>::sendSock(const std::string &msg)
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

347) {
348)   // check that there is a socket and a server address
349)   if (!m_pSock || !m_fileServer.m_valid)
350)     return;
351) 
352)   // send message
353)   m_pSock->send(msg, m_fileServer.m_obj);
354) }
355) 
356) /// receive data from socket
357) template<typename ADDR, typename SOCK>
358) void Phone<ADDR, SOCK>::receiveFromSock()
359) {
360)   std::string msg;
361)   ADDR addr;
362) 
363)   // make sure socket exists
364)   if (!m_pSock)
365)     return;
366) 
367)   // receive (leave if no reception)
368)   if (!m_pSock->recv(msg, addr))
369)     return;
370) 
371)   // check that packet came from server address
372)   if (!m_fileServer.m_valid || addr != m_fileServer.m_obj)
373)     return; // mismatch
374) 
375)   // reset server timeout
376)   m_timeRegister = Time::now() + m_serverTimeout;
377)   updateTimeCallback();
378) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

379)   // process message
380)   serverMsg(msg);
381) }
382) 
383) /**
384)  * @brief process message from server
385)  * @param[in] msg message from server
386)  */
387) template<typename ADDR, typename SOCK>
388) void Phone<ADDR, SOCK>::serverMsg(const std::string &msg)
389) {
390)   // get line number and command
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

391)   StringParser parser(msg);
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

392)   unsigned int line;
393)   std::string cmd;
394)   if (!parser.uintNo(line) || !parser.fixChr(':') ||
395)       !parser.untilDelim(":", false, cmd))
396)     return;
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

397)   if (line < 1) // we are only interested in real lines here
398)     return;
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

399) 
400)   // incoming call
401)   if (cmd == "setup") {
402)     std::string caller, extension;
403)     if (!parser.fixChr(':') || !parser.untilDelim(":", true, caller) ||
404)         !parser.fixChr(':') || !parser.untilDelim(":", false, extension))
405)       return;
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

406)     incomingCall(line, extension);
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

407)   }
408) 
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

409)   // call connected
410)   else if (cmd == "connected") {
411)     connected(line);
412)   }
413) 
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

414)   // hangup
415)   else if (cmd == "onhook") {
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

416)     hangup(line);
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

417)   }
418) 
419)   // DTMF symbol (i.e. key pressed)
420)   else if (cmd == "dtmf") {
421)     char key;
422)     if (!parser.fixChr(':') || !parser.oneChrOf("0123456789*#", key))
423)       return;
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

424)     keyPressed(line, key);
Stefan Schuermans implemented extension confi...

Stefan Schuermans authored 12 years ago

425)   }
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

426) }
427) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

428) /**
429)  * @brief process incoming call
430)  * @param[in] line number of phone line
431)  * @param[in] extension extenstion called (i.e. phone number)
432)  */
433) template<typename ADDR, typename SOCK>
434) void Phone<ADDR, SOCK>::incomingCall(unsigned int line,
435)                                      const std::string &extension)
436) {
437)   // hangup old call on this line (to be on the safe side)
438)   hangup(line);
439) 
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

440)   // buffer further commands to be sent to this line until it is connected
441)   // -> create command buffer for this line
442)   m_cmdBufMap[line];
443) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

444)   // lookup extension
445)   ExtMap::iterator itExt = m_extMap.find(extension);
446)   if (itExt == m_extMap.end())
447)     return; // unknown extension -> ignore
448) 
449)   // try to open operator connection to module
450)   OpConn *pConn = m_mgrs.m_opMgr.connect(itExt->second, this);
451)   if (!pConn) // module is not ready for connection
452)     return;
453) 
454)   // add connection to maps
455)   m_lineConnMap[line] = pConn;
456)   m_connLineMap[pConn] = line;
Stefan Schuermans accepting EBIP calls works now

Stefan Schuermans authored 12 years ago

457) 
458)   // send accept message
459)   sendAccept(line);
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

460) }
461) 
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

462) /**
463)  * @brief phone line connected
464)  * @param[in] line number of phone line
465)  */
466) template<typename ADDR, typename SOCK>
467) void Phone<ADDR, SOCK>::connected(unsigned int line)
468) {
469)   // get buffered commands for this line
470)   CmdBuf &cmdBuf = m_cmdBufMap[line];
471) 
472)   // send buffered commands now
473)   for (CmdBuf::const_iterator cmd = cmdBuf.begin();
474)        cmd != cmdBuf.end(); ++cmd) {
475)     std::stringstream strm;
476)     strm << line << ":" << *cmd;
477)     sendSock(strm.str());
478)   }
479) 
480)   // delete command buffer for this line
481)   m_cmdBufMap.erase(line);
482) }
483) 
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

484) /**
485)  * @brief hangup on phone line
486)  * @param[in] line number of phone line
487)  */
488) template<typename ADDR, typename SOCK>
489) void Phone<ADDR, SOCK>::hangup(unsigned int line)
490) {
491)   // get connection
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

492)   OpConn *pConn;
493)   if (!line2conn(line, pConn))
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

494)     return; // no connection on this line
495) 
496)   // close connection
497)   pConn->close();
498) 
499)   // remove connection from maps
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

500)   m_lineConnMap.erase(line);
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

501)   m_connLineMap.erase(pConn);
Stefan Schuermans clarified operator connecti...

Stefan Schuermans authored 12 years ago

502) 
503)   // remove command buffer for this line
504)   m_cmdBufMap.erase(line);
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

505) }
506) 
507) /**
508)  * @brief key pressed on phone line
509)  * @param[in] line number of phone line
510)  * @param[in] key key that has been pressed
511)  */
512) template<typename ADDR, typename SOCK>
513) void Phone<ADDR, SOCK>::keyPressed(unsigned int line, char key)
514) {
515)   // get connection
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

516)   OpConn *pConn;
517)   if (!line2conn(line, pConn))
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

518)     return; // no connection on this line
519) 
Stefan Schuermans implemented play and key me...

Stefan Schuermans authored 12 years ago

520)   // send key press event over connection
521)   pConn->sendKey(key);
522) }
523) 
524) /**
525)  * @brief get phone line number from operator connection
526)  * @param[in] pConn operator connection object
527)  * @param[out] line phone line number
528)  * @return if phone line was found
529)  */
530) template<typename ADDR, typename SOCK>
531) bool Phone<ADDR, SOCK>::conn2line(OpConn *pConn, unsigned int &line) const
532) {
533)   ConnLineMap::const_iterator itConn = m_connLineMap.find(pConn);
534)   if (itConn == m_connLineMap.end())
535)     return false;
536)   line = itConn->second;
537)   return true;
538) }
539) 
540) /**
541)  * @brief get operator connection from phone line number
542)  * @param[in] line phone line number
543)  * @param[out] pConn operator connection object
544)  * @return if phone line was found
545)  */
546) template<typename ADDR, typename SOCK>
547) bool Phone<ADDR, SOCK>::line2conn(unsigned int line, OpConn *&pConn) const
548) {
549)   LineConnMap::const_iterator itLine = m_lineConnMap.find(line);
550)   if (itLine == m_lineConnMap.end())
551)     return false;
552)   pConn = itLine->second;
553)   return true;
Stefan Schuermans phone connector module basi...

Stefan Schuermans authored 12 years ago

554) }
555) 
Stefan Schuermans begin of phone connector

Stefan Schuermans authored 12 years ago

556) /// update time callback
557) template<typename ADDR, typename SOCK>
558) void Phone<ADDR, SOCK>::updateTimeCallback()
559) {
560)   m_mgrs.m_callMgr.requestTimeCall(this, m_timeRegister < m_timeHeartbeat
561)                                          ? m_timeRegister : m_timeHeartbeat);
562) }
563) 
564) template<typename ADDR, typename SOCK>
BlinkenArea fix EBIP timeout and heartbeat

BlinkenArea authored 12 years ago

565) const Time Phone<ADDR, SOCK>::m_serverTimeout(60);