public void runThread()
        {
            logwrite.write("Finesse FinesseKeepAlive", "Finesse FinesseKeepAlive Thread Start!!");

            try
            {
                while (true)
                {
                    Thread.Sleep(10000);
                    string agentID  = agent.getAgentID();
                    string serverIP = finesseClient.getCurrentServerIP();

                    FinesseDomain domainVO = FinesseDomain.getInstance();
                    string        domain   = domainVO.getFinesseDomain();

                    string strMsg = @"<iq id='" + agentID + "@" + serverIP + "/pidgin' to='" + domain + "' type='get' from='" + agentID + "@" + serverIP + "/pidgin'><ping xmlns='urn:xmpp:ping'/></iq>";

                    logwrite.write("Finesse FinesseKeepAlive", "SEND -> " + strMsg);
                    writer.WriteLine(strMsg);
                    writer.Flush();
                }
            }
            catch (Exception e)
            {
                if (writer != null)
                {
                    writer.Close();
                }
                if (sock != null)
                {
                    sock.Close();
                }
            }
        }
Exemple #2
0
        private int recv(int tempIndex)
        {
            //int BUFFERSIZE = sock.ReceiveBufferSize;
            byte[] buffer = new byte[32768];
            //int bytes = writeStream.Read(buffer, 0, buffer.Length);

            writeStream.ReadTimeout = 3000;

            int read;

            try
            {
                read = writeStream.Read(buffer, 0, buffer.Length);
                if (read > 0)
                {
                    string message = Encoding.UTF8.GetString(buffer, 0, read);
                    logwrite.write("recv", message);

                    /*
                     *  Finesse 서버의 도메인을 가져오기 위한 로직
                     * */
                    if (message.Contains("stream:stream") && tempIndex == 0)
                    {
                        int    startIndex = message.IndexOf("<stream:stream");
                        int    messageLen = message.Length;
                        string tempStr    = message.Substring(startIndex, messageLen - startIndex);

                        startIndex = tempStr.IndexOf("from=");
                        tempStr    = tempStr.Substring(startIndex, tempStr.Length - startIndex);

                        startIndex = 0;
                        int endIndex = 0;
                        int tempInt  = 0;
                        for (int i = 0; i < tempStr.Length; i++)
                        {
                            string str = tempStr.Substring(i, 1);
                            if (str.Equals("\""))
                            {
                                tempInt++;
                                if (tempInt == 1)
                                {
                                    startIndex = i + 1;
                                }
                                else if (tempInt == 2)
                                {
                                    endIndex = i;
                                    break;
                                }
                            }
                        }

                        tempStr = tempStr.Substring(startIndex, endIndex - startIndex);
                        logwrite.write("recv", " ** Finesse Domain ** : [" + tempStr + "]");

                        FinesseDomain domain = FinesseDomain.getInstance();
                        domain.setFinesseDomain(tempStr);
                    }
                }
                else
                {
                    logwrite.write("recv", "return bytes size -> " + read);
                }
            }
            catch (Exception e)
            {
                if (sock != null)
                {
                    sessionClose();
                }
                return(ERRORCODE.FAIL);
            }
            return(ERRORCODE.SUCCESS);
        }
Exemple #3
0
        private int startPreProcess()
        {
            try
            {
                int tempindex = 0;

                FinesseDomain domain = FinesseDomain.getInstance();

                UTIL   util   = new UTIL();
                string strID  = "insungUCDev";
                Random random = new Random();
                int    ranNum = random.Next(1, 10);

                string strMsg = @"<?xml version='1.0' ?><stream:stream to='" + (string)currentServer["IP"] + "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }

                strMsg = @"<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='PLAIN' xmlns:ga='http://www.google.com/talk/protocol/auth' ga:client-uses-full-bind-result='true'>" + util.AuthBase64_IDAndPw(agent.getAgentID(), agent.getAgentPwd()) + "</auth>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }

                strMsg = @"<stream:stream to='" + (string)currentServer["IP"] + "' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' version='1.0'>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }

                strMsg = @"<iq type='set' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>isi</resource></bind></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;

                strMsg = @"<iq type='set' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "'><session xmlns='urn:ietf:params:xml:ns:xmpp-session'/></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;

                strMsg = @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "' to='" + domain.getFinesseDomain() + "'><query xmlns='http://jabber.org/protocol/disco#items'/></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;

                strMsg = @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "' to='" + domain.getFinesseDomain() + "'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;

                strMsg  = @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "'><vCard xmlns='vcard-temp'/></iq>";
                strMsg += @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "'><query xmlns='jabber:iq:roster'/></iq>";
                strMsg += @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "' to='" + domain.getFinesseDomain() + "'><query xmlns='http://jabber.org/protocol/disco#items' node='http://jabber.org/protocol/commands'/></iq>";
                strMsg += @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "' to='proxy.eu.jabber.org'><query xmlns='http://jabber.org/protocol/bytestreams'/></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;

                strMsg = @"<iq type='get' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "' to='proxy." + domain.getFinesseDomain() + "'><query xmlns='http://jabber.org/protocol/bytestreams'/></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;

                strMsg  = @"<presence><priority>1</priority><c xmlns='http://jabber.org/protocol/caps' node='http://pidgin.im/' hash='sha-1' ver='I22W7CegORwdbnu0ZiQwGpxr0Go='/><x xmlns='vcard-temp:x:update'><photo/></x></presence>";
                strMsg += @"<iq type='set' id='" + strID + util.lpad(Convert.ToString(ranNum), "a", 3) + "'><pubsub xmlns='http://jabber.org/protocol/pubsub'><publish node='http://jabber.org/protocol/tune'><item><tune xmlns='http://jabber.org/protocol/tune'/></item></publish></pubsub></iq>";
                send(strMsg);
                if (recv(tempindex++) != ERRORCODE.SUCCESS)
                {
                    return(ERRORCODE.FAIL);
                }
                ranNum++;
            }
            catch (Exception e)
            {
                logwrite.write("startPreProcess", e.ToString());
                return(ERRORCODE.FAIL);
            }

            return(ERRORCODE.SUCCESS);
        }