2011-12-14 1 views
0

modèle Téléphone: bb courbe 8520"tunnel a échoué" exception dans BlackBerry Curve 8520

Version mobile: 4.6.1.314

Transporteur: airtel Inde

APN: airtelgprs.com

Non nom d'utilisateur et mot de passe

J'utilise le code suivant:

String url="http://<address>:<port>/path;deviceside=true"; 
    HttpConnection conn =(HttpConnection)Connector.open(url,Connector.READ_WRITE,true); 
    int response=conn.getResponseode(); 
    if(responsecode==HttpConnection.HTTP_OK) 
    { 
      //...code for handling the response... 
    } 

Ce code déclenche une exception "tunnel failed". Je suis incapable de comprendre la raison derrière cela. L'APN est correctement défini dans le téléphone en fonction de l'opérateur réseau. Je suis également capable d'accéder à Internet via le navigateur.

Veuillez me répondre si vous connaissez la raison de la défaillance du tunnel ou de la défaillance d'un tunnel critique.

Encore une chose, le code fonctionne bien quand j'ajoute interface=wifi à la place de deviceside=true (cela nécessite WIFI pour être allumé et connecté).

[EDIT]

J'ai vérifié le journal dans le BlackBerry Curve 8520 mobile et il ressemble à ceci:

E net.rim.tcp-TNLf 0 
a net.rim.tunnel-pdp2 1 
a net.rim.hrtRT-EPRj 0x2100000001 
a net.rim.tunnel - STnc-00000000 
a net.rim.tunnel- Open - airtelgprs.com 
a net.rim.tcp-open 

Peut-on deviner ce qui est erroné après avoir vu le journal?

+0

Ce journal nous dire que "Il n'y a pas de connexion internet pour votre application". –

+0

avez-vous résolu votre problème? –

+0

J'ai déjà mentionné dans ma question que je suis capable d'accéder à Internet par le biais du navigateur – user990967

Répondre

9

problème commun et ont également répondu à plusieurs reprises

DeviceInfo.isSimulator() puis l'extension est "; deviceside = true"

et

BisConnection alors l'extension est " ; deviceside = false; ConnectionType = mds-public "

et

BesConnection alors l'extension est "; deviceside = false"

et

WifiConnection alors l'extension est "; interface = wifi"

dans ce façon extensions spécifiques ou disponibles donc ce n'est pas un bon moyen d'utiliser les extensions nous devons classes 1) HttpConnectionFactory 2) HttpConnectionFactoryException

il suffit d'importer ces classes dans notre projet.HttpConnectionFactory classe doivent choisir l'extension selon l'ordre de préférence 1) Classe est de définir différents types de connexion

/** 
* Copyright (c) E.Y. Baskoro, Research In Motion Limited. 
* 
* Permission is hereby granted, free of charge, to any person 
* obtaining a copy of this software and associated documentation 
* files (the "Software"), to deal in the Software without 
* restriction, including without limitation the rights to use, 
* copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the 
* Software is furnished to do so, subject to the following 
* conditions: 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
* OTHER DEALINGS IN THE SOFTWARE. 
* 
* This License shall be included in all copies or substantial 
* portions of the Software. 
* 
* The name(s) of the above copyright holders shall not be used 
* in advertising or otherwise to promote the sale, use or other 
* dealings in this Software without prior written authorization. 
* 
*/ 


import java.io.IOException; 
import java.io.OutputStream; 
import java.util.Vector; 

import javax.microedition.io.Connector; 
import javax.microedition.io.HttpConnection; 

import net.rim.device.api.io.http.HttpHeaders; 
import net.rim.device.api.io.http.HttpProtocolConstants; 
import net.rim.device.api.servicebook.ServiceBook; 
import net.rim.device.api.servicebook.ServiceRecord; 
import net.rim.device.api.system.Branding; 
import net.rim.device.api.system.CoverageInfo; 
import net.rim.device.api.system.DeviceInfo; 
import net.rim.device.api.system.WLANInfo; 



public class HttpConnectionFactory { 

    public static final int TRANSPORT_WIFI = 1; 
    public static final int TRANSPORT_BES = 2; 
    public static final int TRANSPORT_BIS = 4; 
    public static final int TRANSPORT_DIRECT_TCP = 8; 
    public static final int TRANSPORT_WAP2 = 16; 
    public static final int TRANSPORT_SIM = 32; 

    public static final int TRANSPORTS_ANY = TRANSPORT_WIFI | TRANSPORT_BES | TRANSPORT_BIS | TRANSPORT_DIRECT_TCP | TRANSPORT_WAP2 | TRANSPORT_SIM; 
    public static final int TRANSPORTS_AVOID_CARRIER = TRANSPORT_WIFI | TRANSPORT_BES | TRANSPORT_BIS | TRANSPORT_SIM; 
    public static final int TRANSPORTS_CARRIER_ONLY = TRANSPORT_DIRECT_TCP | TRANSPORT_WAP2 | TRANSPORT_SIM; 

    public static final int DEFAULT_TRANSPORT_ORDER[] = { TRANSPORT_SIM, TRANSPORT_WIFI, TRANSPORT_BIS, TRANSPORT_BES, TRANSPORT_WAP2, TRANSPORT_DIRECT_TCP }; 

    private static final int TRANSPORT_COUNT = DEFAULT_TRANSPORT_ORDER.length; 

    // private static ServiceRecord srMDS[], srBIS[], srWAP2[], srWiFi[]; 
    private static ServiceRecord srWAP2[]; 
    private static boolean serviceRecordsLoaded = false; 

    private int transports[]; 
    private int lastTransport = -1; 

// protected Logger log = Logger.getLogger(getClass()); 

    public HttpConnectionFactory() { 
     this(0); 
    } 

    public HttpConnectionFactory(int allowedTransports) { 
     this(transportMaskToArray(allowedTransports)); 
    } 

    public HttpConnectionFactory(int transportPriority[]) { 
     if (!serviceRecordsLoaded) { 
      loadServiceBooks(false); 
     } 
     transports = transportPriority; 
    } 

    public static String getUserAgent() { 
     StringBuffer sb = new StringBuffer(); 
     sb.append("BlackBerry"); 
     sb.append(DeviceInfo.getDeviceName()); 
     sb.append("/"); 
     sb.append(DeviceInfo.getSoftwareVersion()); 
     sb.append(" Profile/"); 
     sb.append(System.getProperty("microedition.profiles")); 
     sb.append(" Configuration/"); 
     sb.append(System.getProperty("microedition.configuration")); 
     sb.append(" VendorID/"); 
     sb.append(Branding.getVendorId()); 

     return sb.toString(); 
    } 



    public HttpConnection getHttpConnection(String pURL) { 
     return getHttpConnection(pURL, null, null); 
    } 

    public HttpConnection getHttpConnection(String pURL, HttpHeaders headers) { 
     return getHttpConnection(pURL, headers, null); 
    } 

    public HttpConnection getHttpConnection(String pURL, byte[] data) { 
     return getHttpConnection(pURL, null, data); 
    } 

    public HttpConnection getHttpConnection(String pURL, HttpHeaders headers, byte[] data) { 

     int curIndex = 0; 
     HttpConnection con = null; 

     while ((con = tryHttpConnection(pURL, curIndex, headers, data)) == null) { 
      try { 
       curIndex = nextTransport(curIndex); 
      } catch (HttpConnectionFactoryException e) { 
       e.printStackTrace(); 
       break; 
      } finally { 
      } 
     } 

     if (con != null) { 
      setLastTransport(transports[curIndex]); 
     } 
//  try { 
//   System.out.println(con.getResponseCode()); 
//  } catch (IOException e) { 
//   // TODO Auto-generated catch block 
//   e.printStackTrace(); 
//  } 
     return con; 
    } 

    private int nextTransport(int curIndex) throws HttpConnectionFactoryException { 
     if ((curIndex >= 0) && (curIndex < transports.length - 1)) { 
      return curIndex + 1; 
     } else { 
      throw new HttpConnectionFactoryException("No more transport available."); 
     } 
    } 

    private HttpConnection tryHttpConnection(String pURL, int tIndex, HttpHeaders headers, byte[] data) { 

     HttpConnection con = null; 
     OutputStream os = null; 

//  log.debug("Trying " + getTransportName(transports[tIndex]) + "... "); 
     switch (transports[tIndex]) 
     { 
     case TRANSPORT_SIM: 
      try { 
       con = getSimConnection(pURL, false);        
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_WIFI: 
      try { 
       System.out.println(transports[tIndex]); 
       con = getWifiConnection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_BES: 
      try { 
       con = getBesConnection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_BIS: 
      try { 
       con = getBisConnection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_DIRECT_TCP: 
      try { 
       con = getTcpConnection(pURL); 
      } catch (IOException e) { 
//    break; 
      } finally { 
       break; 
      } 
     case TRANSPORT_WAP2: 
      try { 
       con = getWap2Connection(pURL); 
      } catch (IOException e) { 
//    log.debug(e.getMessage()); 
//    break; 
      } finally { 
       break; 
      } 
     } 
     if (con != null) { 
      try { 
//    log.debug("url = " + con.getURL()); 
       //add headers to connection 
       if (headers != null) { 
        int size = headers.size(); 

        for (int i = 0; i < size;) { 
         String header = headers.getPropertyKey(i); 
         String value = headers.getPropertyValue(i++); 

         if (value != null) { 
          con.setRequestProperty(header, value); 

         } 
        } 
       } 
       // post data 
       if (data != null) { 
        con.setRequestMethod(HttpConnection.POST); 
        con.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_TYPE, HttpProtocolConstants.CONTENT_TYPE_APPLICATION_X_WWW_FORM_URLENCODED); 
        con.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH, String.valueOf(data.length)); 

        os = con.openOutputStream(); 
        os.write(data); 
       } else { 
        con.setRequestMethod(HttpConnection.GET); 
       } 

      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

     return con; 
    } 

    public int getLastTransport() { 
     return lastTransport; 
    } 

    public String getLastTransportName() { 
     return getTransportName(getLastTransport()); 
    } 

    private void setLastTransport(int pLastTransport) { 
     lastTransport = pLastTransport; 
    } 

    private HttpConnection getSimConnection(String pURL, boolean mdsSimulatorRunning) throws IOException { 
     if (DeviceInfo.isSimulator()) { 
      if (mdsSimulatorRunning) { 
       return getConnection(pURL, ";deviceside=false", null); 

      } else { 
       return getConnection(pURL, ";deviceside=true", null); 
      } 
     } 
     return null; 
    } 

    private HttpConnection getBisConnection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(4 /* CoverageInfo.COVERAGE_BIS_B */)) { 
      return getConnection(pURL, ";deviceside=false;ConnectionType=mds-public", null); 
     } 
     return null; 
    } 

    private HttpConnection getBesConnection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(2 /* CoverageInfo.COVERAGE_MDS */)) { 
      return getConnection(pURL, ";deviceside=false", null); 
     } 
     return null; 
    } 

    private HttpConnection getWifiConnection(String pURL) throws IOException { 
     if (WLANInfo.getWLANState() == WLANInfo.WLAN_STATE_CONNECTED) { 

      return getConnection(pURL, ";interface=wifi", null); 

     } 
     return null; 
    } 

    private HttpConnection getWap2Connection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(1 /* CoverageInfo.COVERAGE_DIRECT */) && (srWAP2 != null) && (srWAP2.length != 0)) { 
      return getConnection(pURL, ";deviceside=true;ConnectionUID=", srWAP2[0].getUid()); 
     } 
     return null; 
    } 

    private HttpConnection getTcpConnection(String pURL) throws IOException { 
     if (CoverageInfo.isCoverageSufficient(1 /* CoverageInfo.COVERAGE_DIRECT */)) { 
      return getConnection(pURL, ";deviceside=true", null); 
     } 
     return null; 
    } 

    private HttpConnection getConnection(String pURL, String transportExtras1, String transportExtras2) throws IOException { 
     StringBuffer fullUrl = new StringBuffer(); 
     fullUrl.append(pURL); 
     if (transportExtras1 != null) { 
      fullUrl.append(transportExtras1); 
//   LoadingScreen.tag=transportExtras1; 
     } 
     if (transportExtras2 != null) { 
      fullUrl.append(transportExtras2); 
     } 
     return (HttpConnection) Connector.open(fullUrl.toString()); 
    } 

    public static void reloadServiceBooks() { 
     loadServiceBooks(true); 
    } 

    private static synchronized void loadServiceBooks(boolean reload) { 
     if (serviceRecordsLoaded && !reload) { 
      return; 
     } 
     ServiceBook sb = ServiceBook.getSB(); 
     ServiceRecord[] records = sb.getRecords(); 
     Vector mdsVec = new Vector(); 
     Vector bisVec = new Vector(); 
     Vector wap2Vec = new Vector(); 
     Vector wifiVec = new Vector(); 

     if (!serviceRecordsLoaded) { 
      for (int i = 0; i < records.length; i++) { 
       ServiceRecord myRecord = records[i]; 
       String cid, uid; 

       if (myRecord.isValid() && !myRecord.isDisabled()) { 
        cid = myRecord.getCid().toLowerCase(); 
        uid = myRecord.getUid().toLowerCase(); 
        if ((cid.indexOf("wptcp") != -1) && (uid.indexOf("wap2") != -1) && (uid.indexOf("wifi") == -1) && (uid.indexOf("mms") == -1)) { 
         wap2Vec.addElement(myRecord); 
        } 
       } 
      } 

      srWAP2 = new ServiceRecord[wap2Vec.size()]; 
      wap2Vec.copyInto(srWAP2); 
      wap2Vec.removeAllElements(); 
      wap2Vec = null; 

      serviceRecordsLoaded = true; 
     } 
    } 

    public static int[] transportMaskToArray(int mask) { 
     if (mask == 0) { 
      mask = TRANSPORTS_ANY; 
     } 
     int numTransports = 0; 
     for (int i = 0; i < TRANSPORT_COUNT; i++) { 
      if ((DEFAULT_TRANSPORT_ORDER[i] & mask) != 0) { 
       numTransports++; 
      } 
     } 
     int transports[] = new int[numTransports]; 
     int index = 0; 
     for (int i = 0; i < TRANSPORT_COUNT; i++) { 
      if ((DEFAULT_TRANSPORT_ORDER[i] & mask) != 0) { 
       transports[index++] = DEFAULT_TRANSPORT_ORDER[i]; 
      } 
     } 
     return transports; 
    } 

    private static String getTransportName(int transport) { 
     String tName; 
     switch (transport) { 
     case TRANSPORT_WIFI: 
      tName = "WIFI"; 
      break; 
     case TRANSPORT_BES: 
      tName = "BES"; 
      break; 
     case TRANSPORT_BIS: 
      tName = "BIS"; 
      break; 
     case TRANSPORT_DIRECT_TCP: 
      tName = "TCP"; 
      break; 
     case TRANSPORT_WAP2: 
      tName = "WAP2"; 
      break; 
     case TRANSPORT_SIM: 
      tName = "SIM"; 
      break; 
     default: 
      tName = "UNKNOWN"; 
      break; 
     } 
     return tName; 
    } 

} 

deuxième classe est

/** 
* Copyright (c) E.Y. Baskoro, Research In Motion Limited. 
* 
* Permission is hereby granted, free of charge, to any person 
* obtaining a copy of this software and associated documentation 
* files (the "Software"), to deal in the Software without 
* restriction, including without limitation the rights to use, 
* copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the 
* Software is furnished to do so, subject to the following 
* conditions: 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
* OTHER DEALINGS IN THE SOFTWARE. 
* 
* This License shall be included in all copies or substantial 
* portions of the Software. 
* 
* The name(s) of the above copyright holders shall not be used 
* in advertising or otherwise to promote the sale, use or other 
* dealings in this Software without prior written authorization. 
* 
*/ 


public class HttpConnectionFactoryException extends Exception { 

    public HttpConnectionFactoryException(String string) { 
     super(string); 
    } 

    public HttpConnectionFactoryException() { 
     super(); 
    } 

} 

vous utilisez simplement le code ci-dessous pour vérifier votre extension url chaîne url = "url réelle YOUR"

HttpConnectionFactory factory = new HttpConnectionFactory(0); 
     Httpconnection httpConnection = factory.getHttpConnection(url); 
      if(httpConnection.getResponseCode()==HttpConnection.HTTP_OK){ 
//some of the connection in available 
}else{ 
//no connection available 
} 
Questions connexes