internal void FireOnSkypeQualityTestResult(SktSkype sender, OnSkypeQualityTestResultArgs e)
 {
     if (OnSkypeQualityTestResult == null) return; // No event assigned
     if (gui == null) { FireCallbackInSeparateThread(e, OnSkypeQualityTestResultInNewThread); return; }
     gui.BeginInvoke(OnSkypeQualityTestResult, new object[] { sender, e }); // Synchronizing to gui thread
 }
 internal void ProcessOnSkypeQualityTestResult(SktSkype sender)
 {
     if (skypeRef.logging) skypeRef.Log("Processing event OnSkypeQualityTestResult");
     OnSkypeQualityTestResultArgs args = new OnSkypeQualityTestResultArgs();
     int marker = 0;
     int typeTag = 0;
     do
     {
     typeTag = skypeRef.transport.ReadByte();
     if (typeTag == 122) break;
     marker = skypeRef.transport.ReadByte();
     switch (marker)
     {
         case 0:
             args.testType = (SktSkype.QUALITYTESTTYPE)skypeRef.decoder.DecodeUint();
             break;
         case 1:
             args.testResult = (SktSkype.QUALITYTESTRESULT)skypeRef.decoder.DecodeUint();
             break;
         case 2:
             args.withUser = skypeRef.decoder.DecodeString();
             break;
         case 3:
             args.details = skypeRef.decoder.DecodeString();
             break;
         case 4:
             args.xmlDetails = skypeRef.decoder.DecodeXML();
             break;
         default:
             if (marker != 122) skypeRef.Error(String.Format("Invalid event argument tag {0} in OnSkypeQualityTestResult", marker));
             break;
     }
     } while (marker != 'z');
     skypeRef.transport.ResumeSocketReaderFromEvent();
     args.senderobj = sender;
     FireOnSkypeQualityTestResult(sender, args);
 }