"隧道失败"例外黑莓Curve 8520 [英] "Tunnel Failed" exception in BlackBerry Curve 8520

查看:259
本文介绍了"隧道失败"例外黑莓Curve 8520的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

手机型号:BB曲线8520

Phone model:bb curve 8520

手机版本:4.6.1.314

Phone version:4.6.1.314

载体:印度Airtel

Carrier :airtel india

APN:airtelgprs.com

APN :airtelgprs.com

没有用户名和密码

我用下面的code:

  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...
   }

这code被扔的隧道失败的异常。我无法了解它背后的原因。
所述APN是根据网络运营商在电话正确定义。
我能够通过浏览器也能访问互联网。

This code is throwing a "tunnel failed " exception. I am unable to understand the reason behind it. The APN is properly defined in the phone according to the network carrier. I am able to access internet through the browser also.

如果您知道隧道故障或关键的隧道失败的原因,请回复我。

Please reply me if you know the reason for the tunnel failure or critical tunnel failure.

还有一件事,当我追加code是工作的罚款界面=无线在真正的地方 deviceside =的(这需要WIFI要上并连接)。

One more thing, the code is working fine when I append interface=wifi in the place of deviceside=true (this requires WIFI to be on and connected ).

我查了日志中的黑莓Curve 8520手机,它看起来是这样的:

I checked the log in the BlackBerry Curve 8520 mobile and it looks like this:

 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 

任何一个可以猜什么错看到日志后?

Can any one guess whats wrong after seeing the log?

推荐答案

常见的问题,还回答了很多次

common problem and also answered many times

DeviceInfo.isSimulator(),然后扩展; deviceside =真正的

DeviceInfo.isSimulator() then extension is ";deviceside=true"

BisConnection然后扩展
  deviceside = FALSE; ConnectionType = MDS-公开

BisConnection then extension is ";deviceside=false;ConnectionType=mds-public"

BesConnection然后扩展名是deviceside = FALSE

BesConnection then extension is ";deviceside=false"

WifiConnection然后扩展界面= wifi的

WifiConnection then extension is ";interface=wifi"

在这样特定的扩展或可用,所以这是不使用扩展的好方法
我们不得不类1)HttpConnectionFactory 2)HttpConnectionFactoryException

in this way specific extensions or available so this is not a good way to using extensions we have to classes 1)HttpConnectionFactory 2)HttpConnectionFactoryException

刚刚导入这些类到我们的项目。 HttpConnectionFactory类必须按照顺序由preference来选择扩展
1)班一个是定义不同的连接类型

just import those classes into our project. HttpConnectionFactory class have to chose extension according to order by preference 1)class one is define different connection types

  /**
 * 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;
    }

}

第二类是

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

}

您只需要使用下面的code,以检查你的URL扩展名
字符串URL =你的实际的URL

you just use following code to checking your url extension String url="YOur actual url"

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
}

这篇关于&QUOT;隧道失败&QUOT;例外黑莓Curve 8520的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆