14 * Description: Telephony Multimedia Service |
14 * Description: Telephony Multimedia Service |
15 * |
15 * |
16 */ |
16 */ |
17 |
17 |
18 #include <s32mem.h> |
18 #include <s32mem.h> |
|
19 #include <gstring.h> |
19 #include <AudioPreference.h> |
20 #include <AudioPreference.h> |
20 #include <tmseffectobsrvr.h> |
21 #include <tmseffectobsrvr.h> |
21 #include <tmsglobalroutingobsrvr.h> |
22 #include <tmsglobalroutingobsrvr.h> |
|
23 #include <tmsringtoneobsrvr.h> |
|
24 #include <tmsdtmfobsrvr.h> |
|
25 #include <tmsinbandtoneobsrvr.h> |
22 #include "tmsutility.h" |
26 #include "tmsutility.h" |
23 #include "tmsclientserver.h" |
27 #include "tmsclientserver.h" |
24 #include "tmsproxy.h" |
28 #include "tmsproxy.h" |
25 |
29 |
26 using namespace TMS; |
30 using namespace TMS; |
27 |
31 |
28 // CONSTANTS |
32 // CONSTANTS |
29 const TUint KServerConnectRetries = 2; |
33 const TUint KTMSServerConnectRetries = 2; |
30 const TUint KSessionMessageSlots = 10; |
34 const TUint KSessionMessageSlots = 10; |
|
35 const TUint KUTF8Multiply = 2; |
31 |
36 |
32 // ----------------------------------------------------------------------------- |
37 // ----------------------------------------------------------------------------- |
33 // StartServer |
38 // StartServer |
34 // Static function to start the server process thread. |
39 // Static function to start the server process thread. |
35 // Start the server process/thread which lives in an EPOCEXE object. |
40 // Start the server process/thread which lives in an EPOCEXE object. |
74 // TMSProxy::TMSProxy |
79 // TMSProxy::TMSProxy |
75 // ----------------------------------------------------------------------------- |
80 // ----------------------------------------------------------------------------- |
76 // |
81 // |
77 EXPORT_C TMSProxy::TMSProxy() |
82 EXPORT_C TMSProxy::TMSProxy() |
78 { |
83 { |
79 iEffectsObsrvrList.Reset(); |
84 ResetObjectLists(); |
80 iEffectsParentList.Reset(); |
|
81 iRoutingObsrvrList.Reset(); |
|
82 iRoutingParentList.Reset(); |
|
83 iMsgQHandler = NULL; |
85 iMsgQHandler = NULL; |
84 } |
86 } |
85 |
87 |
86 // ----------------------------------------------------------------------------- |
88 // ----------------------------------------------------------------------------- |
87 // TMSProxy::~TMSProxy |
89 // TMSProxy::~TMSProxy |
88 // ----------------------------------------------------------------------------- |
90 // ----------------------------------------------------------------------------- |
89 // |
91 // |
90 EXPORT_C TMSProxy::~TMSProxy() |
92 EXPORT_C TMSProxy::~TMSProxy() |
91 { |
93 { |
92 iEffectsObsrvrList.Reset(); |
94 ResetObjectLists(); |
93 iEffectsParentList.Reset(); |
|
94 iRoutingObsrvrList.Reset(); |
|
95 iRoutingParentList.Reset(); |
|
96 |
95 |
97 if (iMsgQHandler) |
96 if (iMsgQHandler) |
98 { |
97 { |
99 iMsgQHandler->Cancel(); |
98 iMsgQHandler->Cancel(); |
100 } |
99 } |
399 TIpcArgs(level)); |
398 TIpcArgs(level)); |
400 TRACE_PRN_FN_EXT; |
399 TRACE_PRN_FN_EXT; |
401 return TMSRESULT(status); |
400 return TMSRESULT(status); |
402 } |
401 } |
403 |
402 |
|
403 EXPORT_C gint TMSProxy::InitRT(const TMSRingToneType type, GString* str, |
|
404 GString* tts) |
|
405 { |
|
406 TRACE_PRN_FN_ENT; |
|
407 gint status(TMS_RESULT_INVALID_ARGUMENT); |
|
408 TIpcArgs args; |
|
409 HBufC* ttsBuf(NULL); |
|
410 |
|
411 if (tts) |
|
412 { |
|
413 // Convert buffer from UTF-8 to unicode (16-bit) |
|
414 // Note: UTF-8 strings can take up to 4 bytes per character |
|
415 gint unilen = tts->len / KUTF8Multiply; |
|
416 TRAP(status, ttsBuf = HBufC::NewL(unilen)); |
|
417 if (status == KErrNone) |
|
418 { |
|
419 TPtr p = ttsBuf->Des(); |
|
420 p.Copy((TUint16*) tts->str, unilen); |
|
421 args.Set(1, &p); |
|
422 } |
|
423 } |
|
424 |
|
425 switch (type) |
|
426 { |
|
427 case TMS_RINGTONE_DEFAULT: |
|
428 { |
|
429 status = RSessionBase::SendReceive(ETMSRingToneInitDefault, args); |
|
430 break; |
|
431 } |
|
432 case TMS_RINGTONE_FILE: |
|
433 { |
|
434 if (str) |
|
435 { |
|
436 HBufC* buf(NULL); |
|
437 // Convert buffer from UTF-8 to unicode (16-bit) |
|
438 // Note: UTF-8 strings can take up to 4 bytes per character |
|
439 gint unilen = str->len / KUTF8Multiply; |
|
440 |
|
441 TRAP(status, buf = HBufC::NewL(unilen)); |
|
442 if (status == KErrNone) |
|
443 { |
|
444 TPtr p = buf->Des(); |
|
445 p.Copy((TUint16*) str->str, unilen); |
|
446 TIpcArgs args; |
|
447 args.Set(0, &p); |
|
448 status = RSessionBase::SendReceive(ETMSRingToneInitFile, |
|
449 args); |
|
450 } |
|
451 delete buf; |
|
452 buf = NULL; |
|
453 } |
|
454 break; |
|
455 } |
|
456 case TMS_RINGTONE_BEEP_ONCE: |
|
457 { |
|
458 status = RSessionBase::SendReceive(ETMSRingToneInitBeepOnce); |
|
459 break; |
|
460 } |
|
461 case TMS_RINGTONE_SILENT: |
|
462 { |
|
463 status = RSessionBase::SendReceive(ETMSRingToneInitSilent); |
|
464 break; |
|
465 } |
|
466 case TMS_RINGTONE_UNSECURE_VOIP: |
|
467 { |
|
468 status = RSessionBase::SendReceive(ETMSRingToneInitUnsecureVoIP); |
|
469 break; |
|
470 } |
|
471 case TMS_RINGTONE_SEQUENCE: |
|
472 { |
|
473 if (str) |
|
474 { |
|
475 HBufC8* buf(NULL); |
|
476 gint len = str->len; |
|
477 TRAP(status, buf = HBufC8::NewL(len)); |
|
478 if (status == KErrNone) |
|
479 { |
|
480 TPtr8 p = buf->Des(); |
|
481 p.Copy((TUint8*) str->str, len); |
|
482 TIpcArgs args; |
|
483 args.Set(0, &p); |
|
484 status = RSessionBase::SendReceive( |
|
485 ETMSRingToneInitSequence, args); |
|
486 } |
|
487 delete buf; |
|
488 buf = NULL; |
|
489 } |
|
490 break; |
|
491 } |
|
492 default: |
|
493 break; |
|
494 } |
|
495 |
|
496 delete ttsBuf; |
|
497 ttsBuf = NULL; |
|
498 |
|
499 TRACE_PRN_FN_EXT; |
|
500 return TMSRESULT(status); |
|
501 } |
|
502 |
|
503 EXPORT_C gint TMSProxy::DeinitRT() |
|
504 { |
|
505 gint status(TMS_RESULT_SUCCESS); |
|
506 status = RSessionBase::SendReceive(ETMSRingToneDeinit); |
|
507 return TMSRESULT(status); |
|
508 } |
|
509 |
|
510 EXPORT_C gint TMSProxy::PlayRT() |
|
511 { |
|
512 gint status(TMS_RESULT_SUCCESS); |
|
513 status = RSessionBase::SendReceive(ETMSRingTonePlay); |
|
514 return TMSRESULT(status); |
|
515 } |
|
516 |
|
517 EXPORT_C gint TMSProxy::StopRT() |
|
518 { |
|
519 gint status(TMS_RESULT_SUCCESS); |
|
520 status = RSessionBase::SendReceive(ETMSRingToneStop); |
|
521 return TMSRESULT(status); |
|
522 } |
|
523 |
|
524 EXPORT_C gint TMSProxy::PauseRT() |
|
525 { |
|
526 gint status(TMS_RESULT_SUCCESS); |
|
527 status = RSessionBase::SendReceive(ETMSRingTonePause); |
|
528 return TMSRESULT(status); |
|
529 } |
|
530 |
|
531 EXPORT_C gint TMSProxy::MuteRT() |
|
532 { |
|
533 gint status(TMS_RESULT_SUCCESS); |
|
534 status = RSessionBase::SendReceive(ETMSRingToneMute); |
|
535 return TMSRESULT(status); |
|
536 } |
|
537 |
|
538 EXPORT_C gint TMSProxy::StartDTMF(TMSStreamType streamtype, GString* tone) |
|
539 { |
|
540 TRACE_PRN_FN_ENT; |
|
541 gint status(TMS_RESULT_SUCCESS); |
|
542 |
|
543 HBufC* buf(NULL); |
|
544 TRAP(status, buf = HBufC::NewL(tone->len)); |
|
545 if (status == KErrNone) |
|
546 { |
|
547 TPtr p1 = buf->Des(); |
|
548 TPtr8 p2((TUint8*) tone->str, tone->len, tone->len); |
|
549 p1.Copy(p2); |
|
550 |
|
551 TRACE_PRN_N(p1); |
|
552 |
|
553 TIpcArgs args; |
|
554 args.Set(0, streamtype); |
|
555 args.Set(1, &p1); |
|
556 status = RSessionBase::SendReceive(ETMSStartDTMF, args); |
|
557 } |
|
558 |
|
559 delete buf; |
|
560 buf = NULL; |
|
561 |
|
562 TRACE_PRN_FN_EXT; |
|
563 return TMSRESULT(status); |
|
564 } |
|
565 |
|
566 EXPORT_C gint TMSProxy::StopDTMF(TMSStreamType streamtype) |
|
567 { |
|
568 TRACE_PRN_FN_ENT; |
|
569 gint status(TMS_RESULT_SUCCESS); |
|
570 status = RSessionBase::SendReceive(ETMSStopDTMF, TIpcArgs(streamtype)); |
|
571 TRACE_PRN_FN_EXT; |
|
572 return TMSRESULT(status); |
|
573 } |
|
574 |
|
575 EXPORT_C gint TMSProxy::ContinueDTMFStringSending(gboolean continuesending) |
|
576 { |
|
577 TRACE_PRN_FN_ENT; |
|
578 gint status(TMS_RESULT_SUCCESS); |
|
579 status = RSessionBase::SendReceive(ETMSContinueDTMF, |
|
580 TIpcArgs(continuesending)); |
|
581 TRACE_PRN_FN_EXT; |
|
582 return TMSRESULT(status); |
|
583 } |
|
584 |
|
585 EXPORT_C gint TMSProxy::StartInbandTone(TMSInbandToneType inbandtonetype) |
|
586 { |
|
587 TRACE_PRN_FN_ENT; |
|
588 gint status(TMS_RESULT_SUCCESS); |
|
589 status = RSessionBase::SendReceive(ETMSStartInbandTone, |
|
590 TIpcArgs(inbandtonetype)); |
|
591 TRACE_PRN_FN_EXT; |
|
592 return TMSRESULT(status); |
|
593 } |
|
594 |
|
595 EXPORT_C gint TMSProxy::StopInbandTone() |
|
596 { |
|
597 TRACE_PRN_FN_ENT; |
|
598 gint status(TMS_RESULT_SUCCESS); |
|
599 status = RSessionBase::SendReceive(ETMSStopInbandTone); |
|
600 TRACE_PRN_FN_EXT; |
|
601 return TMSRESULT(status); |
|
602 } |
|
603 |
|
604 EXPORT_C gint TMSProxy::StartDTMFNotifier() |
|
605 { |
|
606 gint status(TMS_RESULT_SUCCESS); |
|
607 status = RSessionBase::SendReceive(ETMSStartDTMFNotifier); //DTMFHandler |
|
608 return TMSRESULT(status); |
|
609 } |
|
610 |
|
611 EXPORT_C gint TMSProxy::CancelDTMFNotifier() |
|
612 { |
|
613 gint status(TMS_RESULT_SUCCESS); |
|
614 status = RSessionBase::SendReceive(ETMSCancelDTMFNotifier); //DTMFHandler |
|
615 return TMSRESULT(status); |
|
616 } |
|
617 |
404 EXPORT_C gint TMSProxy::StartGlobalEffectNotifier() |
618 EXPORT_C gint TMSProxy::StartGlobalEffectNotifier() |
405 { |
619 { |
406 gint status(TMS_RESULT_SUCCESS); |
620 gint status(TMS_RESULT_SUCCESS); |
407 RSessionBase::SendReceive(ETMSStartGlobalEffectNotifier); //CenRepHandler |
621 RSessionBase::SendReceive(ETMSStartGlobalEffectNotifier); //CenRepHandler |
408 return TMSRESULT(status); |
622 return TMSRESULT(status); |
440 switch (type) |
654 switch (type) |
441 { |
655 { |
442 case EMsgQueueGlobalVolumeType: |
656 case EMsgQueueGlobalVolumeType: |
443 case EMsgQueueGlobalGainType: |
657 case EMsgQueueGlobalGainType: |
444 status = AddGlobalEffectObserver((*(TMSEffectObserver*) obsrv), |
658 status = AddGlobalEffectObserver((*(TMSEffectObserver*) obsrv), |
445 (*(TMSEffect*)parent), clientid); |
659 (*(TMSEffect*) parent), clientid); |
446 break; |
660 break; |
447 case EMsgQueueGlobalRoutingType: |
661 case EMsgQueueGlobalRoutingType: |
448 status = AddRoutingObserver((*(TMSGlobalRoutingObserver*) obsrv), |
662 status = AddRoutingObserver((*(TMSGlobalRoutingObserver*) obsrv), |
449 (*(TMSGlobalRouting*)parent), clientid); |
663 (*(TMSGlobalRouting*) parent), clientid); |
|
664 break; |
|
665 case EMsgQueueRingtoneType: |
|
666 status = AddRingToneObserver((*(TMSRingToneObserver*) obsrv), |
|
667 (*(TMSRingTone*) parent), clientid); |
|
668 break; |
|
669 case EMsgQueueDTMFType: |
|
670 status = AddDTMFObserver((*(TMSDTMFObserver*) obsrv), |
|
671 (*(TMSDTMF*) parent), clientid); |
|
672 break; |
|
673 case EMsgQueueInbandToneType: |
|
674 status = AddInbandToneObserver((*(TMSInbandToneObserver*) obsrv), |
|
675 (*(TMSInbandTone*) parent), clientid); |
450 break; |
676 break; |
451 default: |
677 default: |
452 status = TMS_RESULT_INVALID_ARGUMENT; |
678 status = TMS_RESULT_INVALID_ARGUMENT; |
453 break; |
679 break; |
454 } |
680 } |
561 gint index = iRoutingObsrvrList.Find(&obsrv); |
795 gint index = iRoutingObsrvrList.Find(&obsrv); |
562 if (index >= 0) |
796 if (index >= 0) |
563 { |
797 { |
564 iRoutingObsrvrList.Remove(index); |
798 iRoutingObsrvrList.Remove(index); |
565 iRoutingParentList.Remove(index); |
799 iRoutingParentList.Remove(index); |
566 //iClientList.Remove(index); |
800 } |
|
801 else |
|
802 { |
|
803 status = TMS_RESULT_DOES_NOT_EXIST; |
|
804 } |
|
805 return TMSRESULT(status); |
|
806 } |
|
807 |
|
808 gint TMSProxy::AddRingToneObserver(TMSRingToneObserver& obsrv, |
|
809 TMSRingTone& parent, gint /*clientid*/) |
|
810 { |
|
811 gint status = iRingToneObsrvrList.Find(&obsrv); |
|
812 if (status == KErrNotFound) |
|
813 { |
|
814 status = iRingToneObsrvrList.Append(&obsrv); |
|
815 status = iRingToneParentList.Append(&parent); |
|
816 } |
|
817 else |
|
818 { |
|
819 status = TMS_RESULT_ALREADY_EXIST; |
|
820 } |
|
821 return TMSRESULT(status); |
|
822 } |
|
823 |
|
824 gint TMSProxy::RemoveRingToneObserver(TMSRingToneObserver& obsrv) |
|
825 { |
|
826 gint status(TMS_RESULT_SUCCESS); |
|
827 gint index = iRingToneObsrvrList.Find(&obsrv); |
|
828 if (index >= 0) |
|
829 { |
|
830 iRingToneObsrvrList.Remove(index); |
|
831 iRingToneParentList.Remove(index); |
|
832 } |
|
833 else |
|
834 { |
|
835 status = TMS_RESULT_DOES_NOT_EXIST; |
|
836 } |
|
837 return TMSRESULT(status); |
|
838 } |
|
839 |
|
840 gint TMSProxy::AddDTMFObserver(TMSDTMFObserver& obsrv, TMSDTMF& parent, |
|
841 gint /*clientid*/) |
|
842 { |
|
843 // Add to list if observer is not already added |
|
844 gint status = iDTMFObsrvrList.Find(&obsrv); |
|
845 if (status == KErrNotFound) |
|
846 { |
|
847 status = iDTMFObsrvrList.Append(&obsrv); |
|
848 status = iDTMFParentList.Append(&parent); |
|
849 } |
|
850 else |
|
851 { |
|
852 status = TMS_RESULT_ALREADY_EXIST; |
|
853 } |
|
854 return TMSRESULT(status); |
|
855 } |
|
856 |
|
857 gint TMSProxy::RemoveDTMFObserver(TMSDTMFObserver& obsrv) |
|
858 { |
|
859 gint status(TMS_RESULT_SUCCESS); |
|
860 gint index = iDTMFObsrvrList.Find(&obsrv); |
|
861 if (index >= 0) |
|
862 { |
|
863 iDTMFObsrvrList.Remove(index); |
|
864 iDTMFParentList.Remove(index); |
|
865 } |
|
866 else |
|
867 { |
|
868 status = TMS_RESULT_DOES_NOT_EXIST; |
|
869 } |
|
870 return TMSRESULT(status); |
|
871 } |
|
872 |
|
873 gint TMSProxy::AddInbandToneObserver(TMSInbandToneObserver& obsrv, |
|
874 TMSInbandTone& parent, gint /*clientid*/) |
|
875 { |
|
876 // Add to list if observer is not already added |
|
877 gint status = iInbandToneObsrvrList.Find(&obsrv); |
|
878 if (status == KErrNotFound) |
|
879 { |
|
880 status = iInbandToneObsrvrList.Append(&obsrv); |
|
881 status = iInbandToneParentList.Append(&parent); |
|
882 } |
|
883 else |
|
884 { |
|
885 status = TMS_RESULT_ALREADY_EXIST; |
|
886 } |
|
887 return TMSRESULT(status); |
|
888 } |
|
889 |
|
890 gint TMSProxy::RemoveInbandToneObserver(TMSInbandToneObserver& obsrv) |
|
891 { |
|
892 gint status(TMS_RESULT_SUCCESS); |
|
893 gint index = iInbandToneObsrvrList.Find(&obsrv); |
|
894 if (index >= 0) |
|
895 { |
|
896 iInbandToneObsrvrList.Remove(index); |
|
897 iInbandToneParentList.Remove(index); |
567 } |
898 } |
568 else |
899 else |
569 { |
900 { |
570 status = TMS_RESULT_DOES_NOT_EXIST; |
901 status = TMS_RESULT_DOES_NOT_EXIST; |
571 } |
902 } |
651 { |
982 { |
652 output = *((guint*) user_data); |
983 output = *((guint*) user_data); |
653 } |
984 } |
654 for (gint i = 0; i < iRoutingObsrvrList.Count(); i++) |
985 for (gint i = 0; i < iRoutingObsrvrList.Count(); i++) |
655 { |
986 { |
656 iRoutingObsrvrList[i]->GlobalRoutingEvent(iRoutingParentList[i], |
987 iRoutingObsrvrList[i]->GlobalRoutingEvent( |
657 event, output); |
988 iRoutingParentList[i], event, output); |
658 } |
989 } |
659 break; |
990 break; |
660 } |
991 } |
|
992 case TMS_EVENT_RINGTONE_OPEN_COMPLETE: |
|
993 case TMS_EVENT_RINGTONE_PLAY_COMPLETE: |
|
994 case TMS_EVENT_RINGTONE_DEINIT_COMPLETE: |
|
995 { |
|
996 for (gint i = 0; i < iRingToneObsrvrList.Count(); i++) |
|
997 { |
|
998 iRingToneObsrvrList[i]->RingtoneEvent(iRingToneParentList[i], |
|
999 event); |
|
1000 } |
|
1001 break; |
|
1002 } |
|
1003 case TMS_EVENT_DTMF_TONE_STARTED: |
|
1004 case TMS_EVENT_DTMF_TONE_STOPPED: |
|
1005 { |
|
1006 for (gint i = 0; i < iDTMFObsrvrList.Count(); i++) |
|
1007 { |
|
1008 iDTMFObsrvrList[i]->DTMFEvent(iDTMFParentList[i], event); |
|
1009 } |
|
1010 break; |
|
1011 } |
|
1012 case TMS_EVENT_INBAND_TONE_STARTED: |
|
1013 case TMS_EVENT_INBAND_TONE_STOPPED: |
|
1014 { |
|
1015 for (gint i = 0; i < iInbandToneObsrvrList.Count(); i++) |
|
1016 { |
|
1017 iInbandToneObsrvrList[i]->InbandToneEvent( |
|
1018 iInbandToneParentList[i], event); |
|
1019 } |
|
1020 break; |
|
1021 } |
661 default: |
1022 default: |
662 break; |
1023 break; |
663 } |
1024 } |
664 } |
1025 } |
665 |
1026 |
|
1027 // --------------------------------------------------------------------------- |
|
1028 // TMSProxy::ResetObjectLists |
|
1029 // --------------------------------------------------------------------------- |
|
1030 // |
|
1031 void TMSProxy::ResetObjectLists() |
|
1032 { |
|
1033 iEffectsObsrvrList.Reset(); |
|
1034 iRoutingObsrvrList.Reset(); |
|
1035 iRingToneObsrvrList.Reset(); |
|
1036 iDTMFObsrvrList.Reset(); |
|
1037 iInbandToneObsrvrList.Reset(); |
|
1038 |
|
1039 iEffectsParentList.Reset(); |
|
1040 iRoutingParentList.Reset(); |
|
1041 iRingToneParentList.Reset(); |
|
1042 iDTMFParentList.Reset(); |
|
1043 iInbandToneParentList.Reset(); |
|
1044 } |
|
1045 |
666 // End of file |
1046 // End of file |