Exemple #1
0
        public void SendFile(string to, string fileName)
        {
            string        proxyServer = "proxy.teamwiki.de";
            string        proxyPort   = "5000";
            JingleSession session     = new JingleSession(conn, to, fileName, proxyServer, proxyPort);

            ongoingTransports[session.transportSid] = session;
        }
Exemple #2
0
        public void OnJingleIq(object sender, agsXMPP.protocol.client.IQ iq)
        {
            if (!iq.HasTag("jingle"))
            {
                return;
            }
            var jingle = iq.SelectSingleElement("jingle");

            Element       contentIn, transportIn;
            string        sid;
            JingleSession session;

            switch (jingle.GetAttribute("action"))
            {
            // incoming, first step
            case "session-initiate":
                session = new JingleSession(conn, iq);

                var fileName = "";
                try { fileName = jingle.SelectSingleElement("file", true).GetTag("name"); } catch (Exception exx) { }
                if (!AutoAccept)       // && MessageBox.Show("Incoming File Transfer from " + iq.From.ToString() + "\n\n" +fileName, "Jingle file-transfer", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.Cancel) {
                {
                    SendIqResult(iq);
                    var sesTerm = session.BuildSessionTerminate("decline");
                    conn.Send(sesTerm);
                    return;
                }
                SendIqResult(iq);

                ongoingTransports[session.transportSid] = session;
                session.OnFileReceived += ses_OnFileReceived;
                var ack = session.BuildSessionAccept();
                conn.Send(ack);

                var cFirst = session.transportIn.FirstChild;
                var cUsed  = session.BuildCandidateUsed(cFirst.GetAttribute("cid"), "candidate-used");
                conn.Send(cUsed);

                session.DoTransmission(cFirst);

                break;

            // incoming AND sending, second step
            case "transport-info":

                contentIn   = jingle.SelectSingleElement("content");
                transportIn = contentIn.SelectSingleElement("transport");
                sid         = transportIn.GetAttribute("sid");
                if (!ongoingTransports.ContainsKey(sid))
                {
                    SendIqerror(iq); return;
                }

                session = ongoingTransports[sid];
                if (transportIn.HasTag("candidate-used"))
                {
                    var  cid  = transportIn.SelectSingleElement("candidate-used").GetAttribute("cid");
                    var  info = session.GetTransportCandidate(cid);
                    bool ok   = session.DoTransmission(info);
                    if (ok)
                    {
                        SendIqResult(iq);
                    }
                    else
                    {
                        SendIqerror(iq);
                    }
                }
                else if (transportIn.HasTag("candidate-error"))
                {
                    SendIqResult(iq);
                }

                break;


            // sending, first step
            case "session-accept":
                contentIn   = jingle.SelectSingleElement("content");
                transportIn = contentIn.SelectSingleElement("transport");
                sid         = transportIn.GetAttribute("sid");
                if (!ongoingTransports.ContainsKey(sid))
                {
                    SendIqerror(iq); return;
                }
                session = ongoingTransports[sid];
                var cFirst1 = session.transportIn.FirstChild;
                var cUsed1  = session.BuildCandidateUsed(cFirst1.GetAttribute("cid"), "candidate-used");
                conn.Send(cUsed1);

                break;
            }
        }