2014-02-12 2 views
0

Код входа. Вход успешно выполнен.Ошибка отправки файла Asmack 503 Тип = отменить с помощью openfire

 String host=AppContext.HOST;//myHost 
     String [] params={"a1","aa"} 
     int port=AppContext.PORT;//My Port 2777 
     String service=AppContext.SERVICE; //service = smack 
     ConnectionConfiguration connConfig = new ConnectionConfiguration(
       host, port, service); 
     connConfig.setDebuggerEnabled(true); 
      Connection.DEBUG_ENABLED = true; 
    connConfig.setSASLAuthenticationEnabled(true); 
    XMPPConnection connection = new XMPPConnection(connConfig); 
     Log.e("XMPP LoginActivity Username ",params[0]+" pass "+params[1]); 
     try { 
      connection.connect(); 
      connectionFlg=true; 
      Log.i("XMPP LoginActivity", 
        "Connected to " + connection.getHost()); 
     } catch (XMPPException ex) { 
      Log.e("XMPP LoginActivity", "Failed to connect to " 
        + connection.getHost()); 
      Log.e("XMPP LoginActivity", ex.toString()); 
      appContext.setConnection(null); 
     } 
     try { 
      if(connectionFlg) 
      { 
      connection.login(params[0], params[1]); 
      Log.i("XMPP LoginActivity", 
        "Logged in as " + connection.getUser()); 

      Presence presence = new Presence(Presence.Type.available); 
      presence.setStatus("I’m available"); 
      connection.sendPacket(presence); 
      loginFlg=true; 
      appContext.setConnection(connection); 
      }else 
      { 
       Log.e("XMPP LoginActivity", "Failed to connect to " 
         + connection.getHost()); 
      } 

     } catch (XMPPException ex) { 
      loginFlg=false;      ; 
      Log.e("XMPP LoginActivity", "Failed to log in as " 
        + params[0]); 
      Log.e("XMPP LoginActivity", ex.toString()); 
      appContext.setConnection(null); 
     } 

Мой файл отправки кода ниже

public void sendFile(String sentTo) { 
    ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/bytestreams", new BytestreamsProvider()); 
    ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#items", new DiscoverItemsProvider()); 
    ProviderManager.getInstance().addIQProvider("query","http://jabber.org/protocol/disco#info", new DiscoverInfoProvider()); 

    FileTransferManager manager = new FileTransferManager(connection); 
    OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(sentTo); 
    File file = new File(Environment.getExternalStorageDirectory() 
      .getPath() + "/user.json"); 
    try { 
     transfer.sendFile(file, "test_file"); 
    } catch (XMPPException e) { 
     e.printStackTrace(); 
    } 
    while(!transfer.isDone()) { 
     if(transfer.getStatus().equals(Status.error)) { 
      System.out.println("ERROR!!! " + transfer.getError()); 
     } else if (transfer.getStatus().equals(Status.cancelled) 
         || transfer.getStatus().equals(Status.refused)) { 
      System.out.println("Cancelled!!! " + transfer.getError()); 
     } 
     try { 
      Thread.sleep(1000L); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
    if(transfer.getStatus().equals(Status.refused) || transfer.getStatus().equals(Status.error) 
    || transfer.getStatus().equals(Status.cancelled)){ 
     System.out.println("refused cancelled error " + transfer.getError()); 
    } else { 
     System.out.println("Success"); 
    } 

} 

при отправке я получаю это ниже два ответа XML. взгляни, пожалуйста.

1)

12:55:16 PM SENT (1092826504): <iq id="SU8c1-17" to="[email protected]" from="[email protected]/Smack" type="set"><si xmlns="http://jabber.org/protocol/si" id="jsi_2427513438410796738" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="user.json" size="379" ><desc>test_file</desc></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field var="stream-method" type="list-multi"><option><value>http://jabber.org/protocol/bytestreams</value></option><option><value>http://jabber.org/protocol/ibb</value></option></field></x></feature></si></iq> 

2)

12:55:16 PM RCV (1092826504): <iq type="error" id="SU8c1-17" from="[email protected]" to="[email protected]/Smack"><si xmlns="http://jabber.org/protocol/si" id="jsi_2427513438410796738" profile="http://jabber.org/protocol/si/profile/file-transfer"><file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="user.json" size="379"><desc>test_file</desc></file><feature xmlns="http://jabber.org/protocol/feature-neg"><x xmlns="jabber:x:data" type="form"><field var="stream-method" type="list-multi"><option><value>http://jabber.org/protocol/bytestreams</value></option><option><value>http://jabber.org/protocol/ibb</value></option></field></x></feature></si><error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq> 

Пожалуйста, друзья помогают. Я пробовал много фрагментов кода. так как три дня я работаю на том, что только :(

+0

Просьба уточнить ваш вопрос: что должно произойти, что происходит? – Smutje

+0

Я получаю сообщение 503 при отправке файла.см. второй xml в том, что их код ошибки 503 и недоступность службы. это основная проблема. :( – addy

+0

Поскольку Служба ИХ возвращает 503, основная ответственность за это лежит на получателе, и вы вряд ли что-то сделаете, чтобы исправить это на данный момент. – Smutje

ответ

0

я такая же проблема, я исследовал строфу и решил его таким образом.

Многие люди используют «/ Смак» или «/ Ресурс» . как часть ресурсов в JID, но это неправильно

путь ресурса меняется с каждым присутствием изменилось пользователя Допустим, мы хотим, чтобы отправить изображение этому пользователю:. «user1 @ MYDOMAIN»

Вы должны добавить «/ ресурс» часть этой JID и стать этим: user1 @ MYDOMAIN/Resource

Но /Ресурсный путь меняется с наличием, так что вы должны следить за каждым изменением присутствия, чтобы обновить путь ресурса. Лучшего способ получить присутствие пользователя в реестре слушателе и в presencheChanged() метод, вы получите последнюю часть пользователей ресурса, как это:

Roster roster=getRoster(); 
roster.addRosterListener(new RosterListener() { 
       @Override 
       public void entriesAdded(Collection<Jid> addresses) { 
        Log.d("entriesAdded", "ug"); 
        context.sendBroadcast(new Intent("ENTRIES_ADDED")); 
       } 

       @Override 
       public void entriesUpdated(Collection<Jid> addresses) { 
        Log.d("entriesUpdated", "ug"); 
       } 

       @Override 
       public void entriesDeleted(Collection<Jid> addresses) { 
        Log.d("entriesDeleted", "ug"); 
       } 

       @Override 
       public void presenceChanged(Presence presence) { 
        Log.d("presenceChanged", "ug"); 
        //Resource from presence 
        String resource = presence.getFrom().getResourceOrEmpty().toString(); 
        //Update resource part for user in DB or preferences 
        //... 
       } 
      }); 
} 

строка ресурс будут некоторыми генерироваться строка, как «6u1613j3kv» и J станут:

[email protected]/6u1613j3kv 

это означает, что вы должны создать исходящую передачу, как это:

EntityFullJid jid = JidCreate.entityFullFrom("[email protected]/6u1613j3kv"); 
OutgoingFileTransfer transfer = manager.createOutgoingFileTransfer(jid) 
transfer.sendFile(new File("DirectoryPath"), "Description"); 

И это, как я решить мою проблему с файлом передача на smack и Openfire.

В вашей форме дела в sendFile(String sentTo) функция sentTo должна быть сформирована как мой jid с пути ресурса, который меняется с каждым изменением rpesence.

Также упомянуть, где вы должны добавить следующие свойства на сервере Openfire:

xmpp.proxy.enabled - true 
xmpp.proxy.externalip - MY_IP_ADDRESS 
xmpp.proxy.port - 7777 

Просто говоря, я использую Openfire 4.0.2 и Смак 4.2.2.