00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #ifndef OPAL_OPAL_LOCALEP_H
00033 #define OPAL_OPAL_LOCALEP_H
00034
00035 #ifdef P_USE_PRAGMA
00036 #pragma interface
00037 #endif
00038
00039 #include <opal/buildopts.h>
00040
00041 #include <opal/endpoint.h>
00042
00043 class OpalLocalConnection;
00044
00045
00050 class OpalLocalEndPoint : public OpalEndPoint
00051 {
00052 PCLASSINFO(OpalLocalEndPoint, OpalEndPoint);
00053 public:
00058 OpalLocalEndPoint(
00059 OpalManager & manager,
00060 const char * prefix = "local"
00061 );
00062
00065 ~OpalLocalEndPoint();
00067
00080 virtual OpalMediaFormatList GetMediaFormats() const;
00081
00111 virtual PSafePtr<OpalConnection> MakeConnection(
00112 OpalCall & call,
00113 const PString & party,
00114 void * userData = NULL,
00115 unsigned int options = 0,
00116 OpalConnection::StringOptions * stringOptions = NULL
00117 );
00119
00128 PSafePtr<OpalLocalConnection> GetLocalConnectionWithLock(
00129 const PString & token,
00130 PSafetyMode mode = PSafeReadWrite
00131 ) { return GetConnectionWithLockAs<OpalLocalConnection>(token, mode); }
00132
00136 virtual OpalLocalConnection * CreateConnection(
00137 OpalCall & call,
00138 void * userData,
00139 unsigned options,
00140 OpalConnection::StringOptions * stringOptions
00141 );
00142
00148 virtual bool OnOutgoingSetUp(
00149 const OpalLocalConnection & connection
00150 );
00151
00157 virtual bool OnOutgoingCall(
00158 const OpalLocalConnection & connection
00159 );
00160
00169 virtual bool OnIncomingCall(
00170 OpalLocalConnection & connection
00171 );
00172
00177 virtual bool AlertingIncomingCall(
00178 const PString & token,
00179 OpalConnection::StringOptions * options = NULL
00180 );
00181
00186 virtual bool AcceptIncomingCall(
00187 const PString & token,
00188 OpalConnection::StringOptions * options = NULL
00189 );
00190
00195 virtual bool RejectIncomingCall(
00196 const PString & token,
00197 const OpalConnection::CallEndReason & reason = OpalConnection::EndedByAnswerDenied
00198 );
00199
00205 virtual bool OnUserInput(
00206 const OpalLocalConnection & connection,
00207 const PString & indication
00208 );
00209
00218 virtual bool OnReadMediaFrame(
00219 const OpalLocalConnection & connection,
00220 const OpalMediaStream & mediaStream,
00221 RTP_DataFrame & frame
00222 );
00223
00232 virtual bool OnWriteMediaFrame(
00233 const OpalLocalConnection & connection,
00234 const OpalMediaStream & mediaStream,
00235 RTP_DataFrame & frame
00236 );
00237
00246 virtual bool OnReadMediaData(
00247 const OpalLocalConnection & connection,
00248 const OpalMediaStream & mediaStream,
00249 void * data,
00250 PINDEX size,
00251 PINDEX & length
00252 );
00253
00262 virtual bool OnWriteMediaData(
00263 const OpalLocalConnection & connection,
00264 const OpalMediaStream & mediaStream,
00265 const void * data,
00266 PINDEX length,
00267 PINDEX & written
00268 );
00269
00291 enum Synchronicity {
00292 e_Synchronous,
00293 e_Asynchronous,
00294 e_SimulateSyncronous
00295 };
00296
00305 virtual Synchronicity GetSynchronicity(
00306 const OpalMediaFormat & mediaFormat,
00307 bool isSource
00308 ) const;
00309
00312 Synchronicity GetDefaultAudioSynchronicity() const { return m_defaultAudioSynchronicity; }
00313
00316 void SetDefaultAudioSynchronicity(Synchronicity sync) { m_defaultAudioSynchronicity = sync; }
00317
00320 Synchronicity GetDefaultVideoSourceSynchronicity() const { return m_defaultVideoSourceSynchronicity; }
00321
00324 void SetDefaultVideoSourceSynchronicity(Synchronicity sync) { m_defaultVideoSourceSynchronicity = sync; }
00325
00328 bool IsDeferredAlerting() const { return m_deferredAlerting; }
00329
00332 void SetDeferredAlerting(bool defer) { m_deferredAlerting = defer; }
00333
00336 bool IsDeferredAnswer() const { return m_deferredAnswer; }
00337
00340 void SetDeferredAnswer(bool defer) { m_deferredAnswer = defer; }
00342
00343 protected:
00344 bool m_deferredAlerting;
00345 bool m_deferredAnswer;
00346
00347 Synchronicity m_defaultAudioSynchronicity;
00348 Synchronicity m_defaultVideoSourceSynchronicity;
00349
00350 private:
00351 P_REMOVE_VIRTUAL(OpalLocalConnection *, CreateConnection(OpalCall &, void *), 0);
00352 P_REMOVE_VIRTUAL(bool, IsSynchronous() const, false);
00353 };
00354
00355
00360 class OpalLocalConnection : public OpalConnection
00361 {
00362 PCLASSINFO(OpalLocalConnection, OpalConnection);
00363 public:
00368 OpalLocalConnection(
00369 OpalCall & call,
00370 OpalLocalEndPoint & endpoint,
00371 void * userData,
00372 unsigned options,
00373 OpalConnection::StringOptions * stringOptions,
00374 char tokenPrefix = 'L'
00375 );
00376
00379 ~OpalLocalConnection();
00381
00392 virtual PBoolean IsNetworkConnection() const { return false; }
00393
00395 virtual void OnApplyStringOptions();
00396
00406 virtual PBoolean SetUpConnection();
00407
00418 virtual PBoolean SetAlerting(
00419 const PString & calleeName,
00420 PBoolean withMedia
00421 );
00422
00433 virtual PBoolean SetConnected();
00434
00449 virtual OpalMediaStream * CreateMediaStream(
00450 const OpalMediaFormat & mediaFormat,
00451 unsigned sessionID,
00452 PBoolean isSource
00453 );
00454
00457 virtual OpalMediaStreamPtr OpenMediaStream(
00458 const OpalMediaFormat & mediaFormat,
00459 unsigned sessionID,
00460 bool isSource
00461 );
00462
00470 virtual PBoolean SendUserInputString(
00471 const PString & value
00472 );
00474
00483 virtual bool OnOutgoingSetUp();
00484
00491 virtual bool OnOutgoing();
00492
00501 virtual bool OnIncoming();
00502
00505 virtual void AlertingIncoming();
00506
00509 virtual void AcceptIncoming();
00511
00514
00515 void * GetUserData() const { return m_userData; }
00516
00518 void SetUserData(void * v) { m_userData = v; }
00520
00521 protected:
00522 OpalLocalEndPoint & endpoint;
00523 void * m_userData;
00524 };
00525
00526
00531 class OpalLocalMediaStream : public OpalMediaStream, public OpalMediaStreamPacing
00532 {
00533 PCLASSINFO(OpalLocalMediaStream, OpalMediaStream);
00534 public:
00539 OpalLocalMediaStream(
00540 OpalLocalConnection & conn,
00541 const OpalMediaFormat & mediaFormat,
00542 unsigned sessionID,
00543 bool isSource,
00544 OpalLocalEndPoint::Synchronicity synchronicity
00545 );
00547
00555 virtual PBoolean ReadPacket(
00556 RTP_DataFrame & packet
00557 );
00558
00564 virtual PBoolean WritePacket(
00565 RTP_DataFrame & packet
00566 );
00567
00571 virtual PBoolean ReadData(
00572 BYTE * data,
00573 PINDEX size,
00574 PINDEX & length
00575 );
00576
00580 virtual PBoolean WriteData(
00581 const BYTE * data,
00582 PINDEX length,
00583 PINDEX & written
00584 );
00585
00589 virtual PBoolean IsSynchronous() const;
00591
00592 protected:
00593 virtual void InternalClose() { }
00594
00595 OpalLocalEndPoint::Synchronicity m_synchronicity;
00596 };
00597
00598
00599 #endif // OPAL_OPAL_LOCALEP_H
00600
00601
00602