plugin-gateway.jar文件中的修改
在plugin-gateway/org/jivesoftware/openfire/gateway/protocols/aliww
目錄下aliwwSession 和 aliwwTransport 兩個阿里旺旺的功能類
在plugin-gateway/org/jivesoftware/openfire/gateway目錄下修改了
GatewayPlugin.Java文件,在其中添加了阿里旺旺的功能
plugin-gateway-jspc.jar文件的修改
在org/jivesoftware/openfire/plugin/gateway
目錄下的gateway-registration.jsp 和 gateway-settings.jsp 兩頁面中,也對阿里旺旺的功能做了相應的添加,使其能夠在Openfire中的插件中顯示aliww的註冊與設置其屬性
Gateway.jar 文件的修改
在 i18n 國際化語言 目錄的gateway_i18n_zh_CN.properties文件中 添加了阿里旺旺的相應的中文語言信息,在別的語言包中尚未添加
在gateway/web/images目錄下添加了 顯示阿里旺旺的圖片
在gateway/web/WEB-INF/options目錄下添加了 aliww.xml的配置文件,其中用來設置 aliww的主機 、端口、以及其他的一些信息
在gateway/lib 目錄下 需要重新加載 aliww 對應的jar包(此包需要根據qq的lumaqq.jar 進行修改,主要在於 aliww 使用的是 TCP 協議 , 而 q q 使用的是 UDP 協議,在其中的一個方法中進行判斷實現),
在gateway/lib 目錄下 需要對plugin-gateway-jspc.jar 和 Jarplugin-gateway.jar 文件進行修改更新
Spark需要的修改
在Spark中添加aliww 的功能 添加一個 aliwwTransport 類
在Spark.properties屬性文件中添加aliww的圖片
在SparkRes.Java中添加阿里旺旺的圖片屬性
根據laumqq.jar包進行修改,創建一個aliww 的jar包,並 把各種插件重新打包,然後進行測試,
aliww的用戶名不需要驗證
aliww的協議是TCP方式
寫一個qq 或着 msn的測試類
使用ant 重新編譯修改後的gateway 插件
在lumaqq.jar中
在QQClient類1764行有一個Login(String server,int p)的方法,用此方法接收到 主機地址和端口號,是個登陸的方法;
在QQClient類1745行也同樣存在一個Login()方法,此方法也是用來執行登陸,此方法用於判斷用戶信息、該用戶是否已經登錄 以及 主機地址是否爲空的驗證,並根據需要判斷 使用UDP協議 還是 TCP協議 來登錄
在QQPort 類中的 73 行 ,有一個 根據QQClient 創建 一個連接的方法,其寫法如下:此方法根據 提供的 QQClient 、用戶名、密碼、主機地址、端口號,來確定 該連接什麼樣的服務器 ,並返回一個已經連接好的服務器對象
public IConnection create(QQClient client, InetSocketAddress server, InetSocketAddress proxy, String username, String password, boolean start)
throws IOException, UnknownHostException
{
IConnection conn = null;
IConnectionPolicy policy = null;
switch (0.$SwitchMap$edu$tsinghua$lumaqq$qq$QQPort[ordinal()])
{
case 1:
policy = client.getConnectionPolicyFactory().createPolicy(client, this.name, 1, 1, proxy, username, password);
int proxyType = client.getProxyType();
if (client.getUser().isUdp()) {
log.debug("連接UDP服務器: " + server);
if (proxyType == 2) {
log.debug("使用Socks 5代理 " + proxy);
conn = client.getConnectionPool().newUDPSocks5Connection(policy, server, start);
break label412: }
conn = client.getConnectionPool().newUDPConnection(policy, server, start);
break label412: }
log.debug("連接TCP服務器: " + server);
if (proxyType == 2) {
log.debug("使用Socks 5代理 " + proxy);
conn = client.getConnectionPool().newTCPSocks5Connection(policy, server, start);
break label412: } if (proxyType == 1) {
log.debug("使用HTTP代理 " + proxy);
conn = client.getConnectionPool().newTCPHttpConnection(policy, server, start);
break label412: }
conn = client.getConnectionPool().newTCPConnection(policy, server, start);
break;
case 2:
policy = client.getConnectionPolicyFactory().createPolicy(client, this.name, 2, 2, proxy, username, password);
conn = client.getConnectionPool().newTCPConnection(policy, server, start);
break;
case 3:
case 4:
policy = client.getConnectionPolicyFactory().createPolicy(client, this.name, 4, 4, proxy, username, password);
conn = client.getConnectionPool().newUDPConnection(policy, server, start);
}
label412: return conn;
}
在aliww.jar中
用戶名不需要驗證,採用TCP協議,