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(); } } }
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); }
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); }