Http tunnel connection unexpectedly closes
Hi,
I'm trying to ichat to work on an imac connected to a coporate network. I'm trying to connect through a proxy and keep getting the error "http tunnel connection unexpectedly closes".
My .mac account is set to connect through a proxy on port 80 using the http protocol.
Cheers
Craig
Hi,
Can I suggest you ask here about the HTTP tunnel issue.
I have never used iChat this way and think you need to solve that first.
I do know that iChat manages Proxy connections better if pointed to using the System Preferences Settings (Network > Advanced Button)
8:43 PM Tuesday; July 13, 2010
Please, if posting Logs, do not post any Log info after the line "Binary Images for iChat"
Similar Messages
-
Error initializing HTTP tunnel connection
Hi ,
I too got the same error like,
java.io.IOException: Error initializing HTTP tunnel connection:
HTTP/1.0 404 Not Found
Server: servletrunner/2.0
Content-Type: text/html
Content-Length: 95
Date: Wed, 03 Jan 2007 14:59:05 GMT
Here I used J2ME as client application, through servlet runner I am tring to connect to server program. Initially Its worked fine.. But I changed some interner explorer settings. then I got this error. When I changed those setttings to normal also I am not able to connect to the server. Even I reinstall the whole softwares. But the problem is still there.
So could any one help me to resolve the problem.
Its very Urgent project. Its completed but when I try to demonstrate, that day only to connect my PC remotly I changed internet explorer settings very badly. It causes all the damage. Even I changed them to normal also I am not getting any.
Please help me to resolve it.
waiting for your response....
Thanks,
Sri...Size(kb): 0
Name: TEMPLATE_STORE
Records: 12
Size(kb): 14
Remaining Space(kb): 5831
file://localhost/c:/Nokia/
Midlet exit status: true
file://localhost/root1/
Midlet exit status: true
java.io.IOException: java.io.IOExceptionFilesystem root root1/ is not mounted.
file:///c:/
Midlet exit status: true
file:///e:/
Midlet exit status: true
file:///c:/Nokia/Images/
Midlet exit status: true
file:///c:/Nokia/Videos/
Midlet exit status: true
file:///CFCard/
Midlet exit status: true
java.io.IOException: java.io.IOExceptionFilesystem root cfcard/ is not mounted.
file://localhost/
Midlet exit status: true
java.lang.IllegalArgumentException: Malformed file location.
file://localhost/c:/
Midlet exit status: true
file://localhost/e:/
Midlet exit status: true
Default File System Root is: file://localhost/c:/nokia/vaayoo/
Listing files in directory and its sub directories: file://localhost/c:/nokia/vaayoo/
java.io.IOException: Error initializing HTTP tunnel connection:
HTTP/1.1 400 Bad Request
Date: Mon, 23 Apr 2007 08:13:04 GMT
Server: Apache/2.2.4 (Win32)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1
Error initializing HTTP tunnel connection:
HTTP/1.1 400 Bad Request
Date: Mon, 23 Apr 2007 08:13:04 GMT
Server: Apache/2.2.4 (Win32)
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1 -
Applet attempting to access dead http tunneling connection of its immediate predecessor
We're encountering weblogic exceptions when switching between client applets
in the same browser session. Each applet, when invoked, establishes an http
(ie, an http tunneling) connection with the weblogic server. When we use t3
as our protocol, everything works fine. When we use http, however, we get
the following client-side exception as soon as we switch over to the second
applet.
weblogic.utils.AssertionError: ***** ASSERTION FAILED *****[ Dead thread ]
at weblogic.net.http.KeepAliveCache.put(KeepAliveCache.java:57)
at weblogic.net.http.HttpClient.finished(HttpClient.java:147)
at weblogic.net.http.KeepAliveStream.close(KeepAliveStream.java:89)
at weblogic.net.http.KeepAliveStream.justRead(KeepAliveStream.java:37)
at weblogic.net.http.KeepAliveStream.read(KeepAliveStream.java:47)
Some details:
1) We are using sun java plugin, v1.3
2) We are using weblgoc 5.1, sp5.
3) We can temporarily stop this problem from happening by delaying the death
of the first applet. That is, we cause its thread to pause before allowing
itself to die. When we do this, the second applet works fine UNTIL the first
one dies, then it pukes with a similar error to the one above.
It seems like the 2nd applet is trying to access the first one's http
connection stream, and in doing so is throwing an exception upon discovering
that this applet's thread is already gone.
Can anyone guess why this may be happening?
Many thanks.
RamseyRamsey Shehadeh <[email protected]> wrote:
>
Yes, we've tried that. Doing two t3 (or t3s) connections seems to work
fine. It's only the tunneling that's causing us problems.interesting...
looks like they are sharing.
Is there any
way you know of to prevent the applets from sharing sessions? dont know at this time...
session identification are put in cookies and browser instance maps that to a URL.So everytime the browser connects to the URL it identifies with these and they, as far as i know will be same for both applets...
purely a browser concern?dont know...
maybe weblogic could do something at its marshalling/unmarshalling layer of HTTP tunelling...but not sure...
>
Thanks.
Ramsey
shivu wrote:
AFAIK this could be because both applets are sharing the same connection/session...I think when you run two applets in the same browser session, some things get shared especially HTTP Session...
Are you making two different t3 connections in two applets?
"Ramsey Shehadeh" <[email protected]> wrote:
We're encountering weblogic exceptions when switching between client applets
in the same browser session. Each applet, when invoked, establishes an http
(ie, an http tunneling) connection with the weblogic server. When we use t3
as our protocol, everything works fine. When we use http, however, we get
the following client-side exception as soon as we switch over to the second
applet.
weblogic.utils.AssertionError: ***** ASSERTION FAILED *****[ Dead thread ]
at weblogic.net.http.KeepAliveCache.put(KeepAliveCache.java:57)
at weblogic.net.http.HttpClient.finished(HttpClient.java:147)
at weblogic.net.http.KeepAliveStream.close(KeepAliveStream.java:89)
at weblogic.net.http.KeepAliveStream.justRead(KeepAliveStream.java:37)
at weblogic.net.http.KeepAliveStream.read(KeepAliveStream.java:47)
Some details:
1) We are using sun java plugin, v1.3
2) We are using weblgoc 5.1, sp5.
3) We can temporarily stop this problem from happening by delaying the death
of the first applet. That is, we cause its thread to pause before allowing
itself to die. When we do this, the second applet works fine UNTIL the first
one dies, then it pukes with a similar error to the one above.
It seems like the 2nd applet is trying to access the first one's http
connection stream, and in doing so is throwing an exception upon discovering
that this applet's thread is already gone.
Can anyone guess why this may be happening?
Many thanks.
Ramsey -
Java.io.IOException: Error initializing HTTP tunnel connection:
Hi,
I am running sample Midlet to communicate to any URL like http://www.google.com or my internal servlet. It is opening the connection but when I try to open the inputstream it gives me following error.
java.io.IOException: Error initializing HTTP tunnel connection:
HTTP/1.1 407 Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. )
Via: 1.1 TPSL-PROXY
Proxy-Authenticate: Negotiate
Proxy-Authenticate: Kerberos
Proxy-Authenticate: NTLM
Proxy-Authenticate: Digest qop="auth",algorithm=MD5-sess,nonce="3ace49b386edc8013f52a8f9b7c0638bfb8a6ca60b76bf826632da7cd6185c30d3c61c1a61a0aa91",charset=utf-8,realm="TPSL.LOCAL"
Connection: close
Proxy-Connection: close
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/html
Content-Length: 722
at com.sun.midp.io.j2me.http.Protocol.doTunnelHandshake(+333)
at com.sun.midp.io.j2me.http.Protocol.connect(+145)
at com.sun.midp.io.j2me.http.Protocol.streamConnect(+57)
at com.sun.midp.io.j2me.http.Protocol.startRequest(+12)
at com.sun.midp.io.j2me.http.Protocol.sendRequest(+38)
at com.sun.midp.io.j2me.http.Protocol.sendRequest(+6)
at com.sun.midp.io.j2me.http.Protocol.closeOutputStream(+4)
at com.sun.midp.io.BaseOutputStream.close(+14)
at HTTPTest.getGrade(+155)
at HTTPTest.startApp(+8)
at javax.microedition.midlet.MIDletProxy.startApp(+7)
at com.sun.midp.midlet.Scheduler.schedule(+270)
at com.sun.midp.main.Main.runLocalClass(+28)
at com.sun.midp.main.Main.main(+80)
I think it is going through SSL handshake which implemented in HTTP protocol in J2ME.
I have already done the proxy setup and authentication in Sun Wireless toolkit > preferences > Network configuration.
Still error is there. Please help me regarding this, not able to go ahead and rest in peace.
thanks & regards,
mJKHi,
have you checked proxy settings in WTK preferences?
Peter -
How to initialize the Http Tunnel Connection
hi all,
I am developing an application in which i have to get the images from the server.At first i have used the Apache Tomcat it was working fine in my localSystem.
when the same application when getting the images from the server it was getting the following exception in the RunTime,Error in HTTP Tunnel initializing
what does it mean,is this a problem in the network.Can anybody give me the way to initialize the Server or the midlet to get the image.
When the same URL in the Browser it was displaying the image.Can anybody please give me the solution in this aspect
thanks in advance
lakshmanhi ,
The above preferences about the network will work fine when you are working with the localhost.When the same application dealing with the network connection like http://mywebsite/.... it was not giving wny response.
I don't know the reason for that, if you know please share with me.but the application will work fine in mobile. I tested that application with the ASP file in my website with the 6630.
if you have any doubts feel free to post here
lakshman -
HTTP tunneling / number of TCP connections
Environment WLS 7.0 Sp2
We are experimenting with http tunneling and we noticed the following behavior,
when performing a lookup to get a handle to a few session beans that our UI is
using, Weblogic opens an additional TCP connection for every lookup however when
using t3 Weblogic opens a single connection for all of them. Our guess is that
Weblogic's T3 is optimized to pipeline and multiplex everything asynchronously
over one TCP connection.
Is there a way to configure Weblogic to use a single TCP connection when tunneling?I believe it would just be an OS-level limit, on the number of socket handles that can be opened.
-
Get InitialContext for P4-connection via Http tunneling
Hi,
I have to use an Http tunnel to access my integration J2EE engine.
Now, I want to create a P4-connection. It doesn't work. No InitialContext will be returned.
I can open the VisualAdmin on the http tunneling port. But in the connection GUI I can select 'Http tunneling' as connection type. Is there any setting, i.e. property, for the InitialContext to signal that Http tunneling should be used ?
Regards,
AstridHi Astrid,
yes, you need ot use TransportLayerQueue property of the InitialContext to specify that you need Http Tunneling as the transport layer. See <a href="http://help.sap.com/saphelp_nw04/helpdata/en/c8/5bc0417951cf17e10000000a155106/frameset.htm">this</a> page for description.
Did you use that already?
Regards,
Ivo -
Slow connection to flash media server 2 (with HTTP Tunneling)
Hello,
I use a FMS2 for a big project which include Instant
Messenger and
streaming video.
On my development platform. I have no problem. But in the
final
configuration, the connection to Flash Media Server takes a
lot of
time (about 2 or 3 minutes) and i can't find why.
FMS2 was installed on Windows 2003 Server behind a proxy and
a
firewall which only let the hostport 80 oppened.
The server does not run a web server (or anyother
application) which
use this hostport.
The connection are established by HTTP Tunneling.
Does someone already have the same problem?
Thanks for your answers and sorry for my poor english level.
GuillaumeI forgot to mention:
Flash Media server is running fine. I can log into the Admin
application no probs.
I created a folder called "test". Inside that folder I
created another one called streams and inside that folder I created
a folder called _definst_.
I placed an flv file called: test.flv in to the _definst_
folder.
In Dreamweaver CS3 I inserted a Flash Video File:
Chose Streaming as the option and for the RTMP path I put:
rtmp://ipaddressofserver/test/_definst_/test.flv
Called the stream....test.
When i run the page it loads, but the page is blank.
In the Flash Media Server, in the "View Applicationd" tab
I get the record of test and underneath it in the same link
it says test.flv with 1 client
The Streams tab shows a random name and Netstream.
This tells me its recognising the connection and link, but
the movie is not on the page
any help would be appreciated
cheers -
Help needed in HTTP Tunneling - urgent
Hi all,
I urgently need a working code sample of a client which sends requests to a server that redirects the request to an RMI server via RMI servlet.
Does any of you familiar of such a code sample?
ThanksI'm sorry, but HTTP Tunneling is not working for me. I must have done something wrong.
Let me describe my configuration:
I have a server behind NAT router which connected to apache2 and tomcat 4.1 web servers. The apache2 and tomcat are not connected between them.
I deployed war file on tomcat which contains the servlet for the HTTP Tunneling which its code is:
public class RmiHttpTunnelerServlet extends HttpServlet
public void init(ServletConfig config) throws ServletException
super.init(config);
System.out.println("Simplified RMI Servlet Handler loaded successfully.");
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
try
String queryString = req.getQueryString();
String command, param;
int delim = queryString.indexOf("=");
if (delim == -1)
command = queryString;
param = "";
else
command = queryString.substring(0, delim);
param = queryString.substring(delim + 1);
if (command.equalsIgnoreCase("forward"))
try
ServletForwardCommand.execute(req, res, param);
catch (ServletClientException e)
returnClientError(res, "client error : " + e.getMessage( ));
e.printStackTrace();
catch (ServletServerException e)
returnServerError(res, "internal server error : " + e.getMessage());
e.printStackTrace();
else
returnClientError(res, "invalid command: " + command);
catch (Exception e)
returnServerError(res, "internal error: " + e.getMessage());
e.printStackTrace();
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
returnClientError(res, "GET Operation not supported: Can only forward POST requests.");
public void doPut(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
returnClientError(res, "PUT Operation not supported: Can only forward POST requests.");
public String getServletInfo()
return "Simplified RMI Call Forwarding Servlet Servlet.<br>\n ";
private static void returnClientError(HttpServletResponse res, String message) throws IOException
res.sendError(HttpServletResponse.SC_BAD_REQUEST,
"<HTML><HEAD><TITLE>Java RMI Client Error < / TITLE > < / HEAD > < BODY > " +
"<H1>Java RMI Client Error</H1>" + message + "</BODY></HTML>");
System.err.println(HttpServletResponse.SC_BAD_REQUEST + "Java RMI Client Error" + message);
private static void returnServerError(HttpServletResponse res,
String message) throws IOException
res.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"<HTML><HEAD>< TITLE > Java RMI Server Error < / TITLE > < / HEAD > < BODY > " +
"<H1>Java RMI Server Error < / H1 > " + message + " < / BODY > < / HTML > ");
System.err.println(HttpServletResponse.SC_INTERNAL_SERVER_ERROR + "Java RMI Server Error : " + message);
}There is also a utility class:
public class ServletForwardCommand {
public static void execute(HttpServletRequest request, HttpServletResponse response, String stringifiedPort)
throws ServletClientException, ServletServerException, IOException {
int port = convertStringToPort(stringifiedPort);
Socket connectionToLocalServer = null;
try {
connectionToLocalServer = connectToLocalServer(port);
forwardRequest(request, connectionToLocalServer);
forwardResponse(response, connectionToLocalServer);
} finally {
if (null != connectionToLocalServer) {
connectionToLocalServer.close();
private static int convertStringToPort(String stringfiedPort) throws ServletClientException {
int returnValue;
try {
returnValue = Integer.parseInt(stringfiedPort);
} catch (NumberFormatException e) {
throw new ServletClientException("invalid port number: " + stringfiedPort);
if (returnValue <= 0 || returnValue > 0xFFFF) {
throw new ServletClientException("invalid port: " + returnValue);
if (returnValue < 1024) {
throw new ServletClientException("permission denied for port: " + returnValue);
return returnValue;
private static Socket connectToLocalServer(int port) throws ServletServerException {
Socket returnValue;
try {
returnValue = new Socket(InetAddress.getLocalHost(), port);
} catch (IOException e) {
throw new ServletServerException("could not connect to " + "local port");
return returnValue;
private static void forwardRequest(HttpServletRequest request, Socket connectionToLocalServer)
throws IOException, ServletClientException, ServletServerException {
byte buffer[];
DataInputStream clientIn = new DataInputStream(request.getInputStream());
buffer = new byte[request.getContentLength()];
try {
clientIn.readFully(buffer);
} catch (EOFException e) {
throw new ServletClientException("unexpected EOF " + "reading request body");
} catch (IOException e) {
throw new ServletClientException("error reading request" + " body");
DataOutputStream socketOut = null;
// send to local server in HTTP
try {
socketOut = new DataOutputStream(connectionToLocalServer.getOutputStream());
socketOut.writeBytes("POST / HTTP/1.0\r\n");
socketOut.writeBytes("Content-length: " + request.getContentLength() + "\r\n\r\n");
socketOut.write(buffer);
socketOut.flush();
} catch (IOException e) {
throw new ServletServerException("error writing to server");
private static void forwardResponse(HttpServletResponse response, Socket connectionToLocalServer)
throws IOException, ServletClientException, ServletServerException {
byte[] buffer;
DataInputStream socketIn;
try {
socketIn = new DataInputStream(connectionToLocalServer.getInputStream());
} catch (IOException e) {
throw new ServletServerException("error reading from " + "server");
String key = "Content-length:".toLowerCase();
boolean contentLengthFound = false;
String line;
int responseContentLength = -1;
do {
try {
line = socketIn.readLine();
} catch (IOException e) {
throw new ServletServerException("error reading from server");
if (line == null) {
throw new ServletServerException("unexpected EOF reading server response");
if (line.toLowerCase().startsWith(key)) {
responseContentLength = Integer.parseInt(line.substring(key.length()).trim());
contentLengthFound = true;
while ((line.length() != 0) &&
(line.charAt(0) != '\r') && (line.charAt(0) != '\n'));
if (!contentLengthFound || responseContentLength < 0)
throw new ServletServerException("missing or invalid content length in server response");
buffer = new byte[responseContentLength];
try {
socketIn.readFully(buffer);
} catch (EOFException e) {
throw new ServletServerException("unexpected EOF reading server response");
} catch (IOException e) {
throw new ServletServerException("error reading from server");
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/octet-stream");
response.setContentLength(buffer.length);
try {
OutputStream out = response.getOutputStream();
out.write(buffer);
out.flush();
} catch (IOException e) {
throw new ServletServerException("error writing response");
}I checked also with packets monitoring tool, I couldn't see any http transportation.
Any help will be appreciated. -
Here is example code for HTTPS Tunneling through proxy(400 Lines of code
Here is the source for Https Tunneling that I have gotten working. It is based on Pua Yeow Cheong's JavaWorld Tip 111. Thanks to David Lord for providing the final breakthrough that I needed.
I have posted it here for anyone who wishes to use it. If you find any bugs, or write any improvements, please tack them onto the end of this thread.
I have been trying to tackle this problem for quite some time, so I hope this helps a few of you out there.
Lots of Luck,
nightmask.
<----- Begin Copy and Paste -------->
import java.net.*;
import java.io.*;
import java.security.*;
import sun.misc.BASE64Encoder;
import javax.net.*;
import javax.net.ssl.*;
* This example is based on JavaWorld Tip 111. Thanks to Pua Yeow Cheong for writing it.
* It tunnels through a proxy using the Https protocol.
* Thanks go to David Lord in the java forums for figuring out the main problem with Tip 111
* PLEASE NOTE: You need to have the JSSE 1.0.2 jars installed for this to work
* Downloads contents of a URL, using Proxy Tunneling and Basic Authentication
public class URLReader {
* The main program for the URLReader class
public static void main(String[] args) throws Exception {
//set up strings for use in app. Change these to your own settings
String proxyPassword = "password";
String proxyUsername = "username";
String proxyHost = "myproxy.com";
String proxyPort = "3128";
String connectionURL = "https://www.verisign.com";
//set up system properties to indicate we are using a proxy
System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", proxyPort);
System.setProperty("proxyHost", proxyHost);
System.setProperty("proxyPort", proxyPort);
System.setProperty("proxySet", "true");
System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort);
System.setProperty("http.proxySet", "true");
//set up handler for jsse
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
java.security.Provider prov = new com.sun.net.ssl.internal.ssl.Provider();
Security.addProvider(prov);
//create the connection
URL myURL = new URL(connectionURL);
URLConnection myConnection = myURL.openConnection();
if (myConnection instanceof com.sun.net.ssl.HttpsURLConnection) {
((com.sun.net.ssl.HttpsURLConnection) myConnection).setSSLSocketFactory(new SSLTunnelSocketFactory(System.getProperty("proxyHost"), System.getProperty("proxyPort")));
myConnection.setDoInput(true);
myConnection.setDoOutput(true);
BufferedReader in;
try {
System.err.println("opening Input stream1");
in = new BufferedReader(
new InputStreamReader(
myConnection.getInputStream()));
String inputLine;
System.err.println("Input stream is Open1");
while ((inputLine = in.readLine()) != null) {
System.err.println(inputLine);
in.close();
System.err.println("Input stream is Closed1");
} catch (Exception e) {
e.printStackTrace(System.err);
String tmp = e.getMessage().toLowerCase().trim();
System.err.println("tmp *" + tmp + "*");
if (tmp.indexOf("http") > -1) {
//http error message to be parsed
tmp = tmp.substring(tmp.indexOf("http")).trim();
System.err.println("tmp *" + tmp + "*");
tmp = tmp.substring(8).trim();
System.err.println("tmp *" + tmp + "*");
if (tmp.startsWith("407")) {
//proxy authentication required
myURL = new URL(connectionURL);
myConnection = myURL.openConnection();
if (myConnection instanceof com.sun.net.ssl.HttpsURLConnection) {
((com.sun.net.ssl.HttpsURLConnection) myConnection).setSSLSocketFactory(new SSLTunnelSocketFactory(System.getProperty("proxyHost"), System.getProperty("proxyPort"), proxyUsername, proxyPassword));
myConnection.setDoInput(true);
myConnection.setDoOutput(true);
try {
System.err.println("opening Input stream 2");
in = new BufferedReader(
new InputStreamReader(
myConnection.getInputStream()));
String inputLine;
System.err.println("Input stream is Open 2");
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
in.close();
System.err.println("Input stream is closed 2");
} catch (Exception ex) {
System.err.println(ex.getMessage());
ex.printStackTrace(System.err);
* SSLSocket used to tunnel through a proxy
class SSLTunnelSocketFactory extends SSLSocketFactory {
private String tunnelHost;
private int tunnelPort;
private SSLSocketFactory dfactory;
private String tunnelPassword;
private String tunnelUserName;
private boolean socketConnected = false;
private int falsecount = 0;
* Constructor for the SSLTunnelSocketFactory object
*@param proxyHost The url of the proxy host
*@param proxyPort the port of the proxy
public SSLTunnelSocketFactory(String proxyHost, String proxyPort) {
System.err.println("creating Socket Factory");
tunnelHost = proxyHost;
tunnelPort = Integer.parseInt(proxyPort);
dfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
* Constructor for the SSLTunnelSocketFactory object
*@param proxyHost The url of the proxy host
*@param proxyPort the port of the proxy
*@param proxyUserName username for authenticating with the proxy
*@param proxyPassword password for authenticating with the proxy
public SSLTunnelSocketFactory(String proxyHost, String proxyPort, String proxyUserName, String proxyPassword) {
System.err.println("creating Socket Factory with password/username");
tunnelHost = proxyHost;
tunnelPort = Integer.parseInt(proxyPort);
tunnelUserName = proxyUserName;
tunnelPassword = proxyPassword;
dfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
* Sets the proxyUserName attribute of the SSLTunnelSocketFactory object
*@param proxyUserName The new proxyUserName value
public void setProxyUserName(String proxyUserName) {
tunnelUserName = proxyUserName;
* Sets the proxyPassword attribute of the SSLTunnelSocketFactory object
*@param proxyPassword The new proxyPassword value
public void setProxyPassword(String proxyPassword) {
tunnelPassword = proxyPassword;
* Gets the supportedCipherSuites attribute of the SSLTunnelSocketFactory
* object
*@return The supportedCipherSuites value
public String[] getSupportedCipherSuites() {
return dfactory.getSupportedCipherSuites();
* Gets the defaultCipherSuites attribute of the SSLTunnelSocketFactory
* object
*@return The defaultCipherSuites value
public String[] getDefaultCipherSuites() {
return dfactory.getDefaultCipherSuites();
* Gets the socketConnected attribute of the SSLTunnelSocketFactory object
*@return The socketConnected value
public synchronized boolean getSocketConnected() {
return socketConnected;
* Creates a new SSL Tunneled Socket
*@param s Ignored
*@param host destination host
*@param port destination port
*@param autoClose wether to close the socket automaticly
*@return proxy tunneled socket
*@exception IOException raised by an IO error
*@exception UnknownHostException raised when the host is unknown
public Socket createSocket(Socket s, String host, int port, boolean autoClose)
throws IOException, UnknownHostException {
Socket tunnel = new Socket(tunnelHost, tunnelPort);
doTunnelHandshake(tunnel, host, port);
SSLSocket result = (SSLSocket) dfactory.createSocket(tunnel, host, port, autoClose);
result.addHandshakeCompletedListener(
new HandshakeCompletedListener() {
public void handshakeCompleted(HandshakeCompletedEvent event) {
System.out.println("Handshake Finished!");
System.out.println("\t CipherSuite :" + event.getCipherSuite());
System.out.println("\t SessionId: " + event.getSession());
System.out.println("\t PeerHost: " + event.getSession().getPeerHost());
setSocketConnected(true);
// thanks to David Lord in the java forums for figuring out this line is the problem
// result.startHandshake(); //this line is the bug which stops Tip111 from working correctly
return result;
* Creates a new SSL Tunneled Socket
*@param host destination host
*@param port destination port
*@return tunneled SSL Socket
*@exception IOException raised by IO error
*@exception UnknownHostException raised when the host is unknown
public Socket createSocket(String host, int port)
throws IOException, UnknownHostException {
return createSocket(null, host, port, true);
* Creates a new SSL Tunneled Socket
*@param host Destination Host
*@param port Destination Port
*@param clientHost Ignored
*@param clientPort Ignored
*@return SSL Tunneled Socket
*@exception IOException Raised when IO error occurs
*@exception UnknownHostException Raised when the destination host is
* unknown
public Socket createSocket(String host, int port, InetAddress clientHost,
int clientPort)
throws IOException, UnknownHostException {
return createSocket(null, host, port, true);
* Creates a new SSL Tunneled Socket
*@param host destination host
*@param port destination port
*@return tunneled SSL Socket
*@exception IOException raised when IO error occurs
public Socket createSocket(InetAddress host, int port)
throws IOException {
return createSocket(null, host.getHostName(), port, true);
* Creates a new SSL Tunneled Socket
*@param address destination host
*@param port destination port
*@param clientAddress ignored
*@param clientPort ignored
*@return tunneled SSL Socket
*@exception IOException raised when IO exception occurs
public Socket createSocket(InetAddress address, int port,
InetAddress clientAddress, int clientPort)
throws IOException {
return createSocket(null, address.getHostName(), port, true);
* Sets the socketConnected attribute of the SSLTunnelSocketFactory object
*@param b The new socketConnected value
private synchronized void setSocketConnected(boolean b) {
socketConnected = b;
* Description of the Method
*@param tunnel tunnel socket
*@param host destination host
*@param port destination port
*@exception IOException raised when an IO error occurs
private void doTunnelHandshake(Socket tunnel, String host, int port) throws IOException {
OutputStream out = tunnel.getOutputStream();
//generate connection string
String msg = "CONNECT " + host + ":" + port + " HTTP/1.0\n"
+ "User-Agent: "
+ sun.net.www.protocol.http.HttpURLConnection.userAgent;
if (tunnelUserName != null && tunnelPassword != null) {
//add basic authentication header for the proxy
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
String encodedPassword = enc.encode((tunnelUserName + ":" + tunnelPassword).getBytes());
msg = msg + "\nProxy-Authorization: Basic " + encodedPassword;
msg = msg + "\nContent-Length: 0";
msg = msg + "\nPragma: no-cache";
msg = msg + "\r\n\r\n";
System.err.println(msg);
byte b[];
try {
//we really do want ASCII7 as the http protocol doesnt change with locale
b = msg.getBytes("ASCII7");
} catch (UnsupportedEncodingException ignored) {
//If ASCII7 isn't there, something is seriously wrong!
b = msg.getBytes();
out.write(b);
out.flush();
byte reply[] = new byte[200];
int replyLen = 0;
int newlinesSeen = 0;
boolean headerDone = false;
InputStream in = tunnel.getInputStream();
boolean error = false;
while (newlinesSeen < 2) {
int i = in.read();
if (i < 0) {
throw new IOException("Unexpected EOF from Proxy");
if (i == '\n') {
headerDone = true;
++newlinesSeen;
} else
if (i != '\r') {
newlinesSeen = 0;
if (!headerDone && replyLen < reply.length) {
reply[replyLen++] = (byte) i;
//convert byte array to string
String replyStr;
try {
replyStr = new String(reply, 0, replyLen, "ASCII7");
} catch (UnsupportedEncodingException ignored) {
replyStr = new String(reply, 0, replyLen);
//we check for connection established because our proxy returns http/1.1 instead of 1.0
if (replyStr.toLowerCase().indexOf("200 connection established") == -1) {
System.err.println(replyStr);
throw new IOException("Unable to tunnel through " + tunnelHost + ":" + tunnelPort + ". Proxy returns\"" + replyStr + "\"");
//tunneling hanshake was successful
}<----- End Copy and Paste -------->BTW, if you are using an implementation in which
the http/https implementation recognises
the java.net.Authenticator properly, you can use
that framework to do basic/digest authentication.
I think Sun's JDK 1.4 supports both basic
and digest for both proxies and the actual end
site you connect via http/https, but I haven't
tested it to be sure. I know it works
with http/basic at the end host.
Today's Ob hack:
import java.net.*;
import java.io.*;
class MyAuth extends Authenticator {
protected PasswordAuthentication getPasswordAuthentication() {
System.out.println("The realm '" + getRequestingPrompt() +
"' at '" + getRequestingHost() + ":" + getRequestingPort() +
"'\n" + "using " + getRequestingProtocol() + " is requesting " +
getRequestingScheme().toUpperCase() + " authentication.");
System.out.println("");
System.out.println("What should we send them? Let's send them ...");
System.out.println("");
return new PasswordAuthentication("username", "password".toCharArray()); }
public class MyURL {
public static void main(String[] args) throws Exception {
// set to the authenticator you want to use.
Authenticator.setDefault(new myAuth());
URL url =
new URL("http://www.some.com/something_protected/index.htm");
BufferedReader in = new BufferedReader(
new InputStreamReader(
url.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println(inputLine);
in.close(); -
So I am connecting my MacBook using a dial-up connection in my student house.
I connect to the internet using a lot of proxy settings and such that the university gave me, but I'm having problems initially connecting to iChat and also staying connected.
When i cannot connect I get a message saying "connection to host unexpectedly lost" and when I actually connect, it tells me after a few minutes something about "HTTP tunnels" (sorry I cannot remember the exact error message).
I am also having trouble Syncing my Mail, so I think all this has to do with my proxy settings when using the university student house connection, but I don't know anything about proxies or tunnels really.
I have tried to put all relevant details of my problem here, sorry if I sound stupid or wordy.
Froggermario
macbook Mac OS X (10.4.7)
macbook Mac OS X (10.4.7)I changed the port and this hels with the initial connection, so I'm no longer having that problem, but my "HTTP tunnel" unexpectedly closes often.
I am only trying to do text chatting, I use Skype for the audio and I've given up on any hope of video - I know I don't have a great connection
Thanks,
froggermario -
Use of servlet http tunneling for client server communication
Hello I am having a problem connecting a simple client applet to a server application. I can connect the two directly using sockets. However, when I try to connect the two via a servlet the input stream cannot be accessed. The application is purely for demonstration. Here is some of the source code
A servlet for http tunneling
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SocketServlet extends HttpServlet
ServletInputStream servletinput;
ServletOutputStream servletoutput;
Socket socket;
DataOutputStream dataoutput;
DataInputStream datainput;
public SocketServlet()
public void init(ServletConfig servletconfig) throws ServletException
super.init(servletconfig);
log("Socket servlet initialized.");
public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException
try
servletinput = request.getInputStream();
socket = new Socket( InetAddress.getByName( "127.0.0.1" ), 5000 );
dataoutput = new DataOutputStream( socket.getOutputStream() );
try
byte[] inbytes = new byte[1024];
servletinput.read( inbytes );
String inmessage = new String( inbytes );
dataoutput.writeBytes( inmessage );
catch(IOException ioex)
dataoutput.flush();
datainput = new DataInputStream( socket.getInputStream() );
servletoutput = response.getOutputStream();
try
byte[] outbytes = new byte[1024];
datainput.read( outbytes );
servletoutput.write( outbytes );
catch(IOException ioex)
servletoutput.flush();
servletoutput.close();
catch(Exception ex)
// Server.java
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Server extends JFrame {
private JTextField enter;
private JTextArea display;
DataOutputStream output;
DataInputStream input;
public Server()
super( "Server" );
Container c = getContentPane();
enter = new JTextField();
enter.setEnabled( false );
c.add( enter, BorderLayout.SOUTH );
display = new JTextArea();
c.add( new JScrollPane( display ),
BorderLayout.CENTER );
setSize( 300, 150 );
show();
public void runServer()
ServerSocket server;
Socket connection;
int counter = 1;
try {
// Step 1: Create a ServerSocket.
server = new ServerSocket( 5000, 100 );
while ( true ) {
// Step 2: Wait for a connection.
display.setText( "Waiting for connection\n" );
connection = server.accept();
display.append( "Connection " + counter +
" received from: " +
connection.getInetAddress().getHostName() );
// Step 3: Get input and output streams.
output = new DataOutputStream(
connection.getOutputStream() );
input = new DataInputStream(
connection.getInputStream() );
display.append( "\nGot I/O streams\n" );
// Step 4: Process connection.
String message =
"SERVER>>> Connection successful";
output.writeBytes( message );
enter.setEnabled( true );
display.append( "\nConnected\n" );
do {
try {
byte[] mess = new byte[1024];
input.read( mess );
display.append( "\n" + message );
display.setCaretPosition(
display.getText().length() );
catch (IOException ioex )
} while ( !message.equals( "CLIENT>>> TERMINATE" ) );
// Step 5: Close connection.
display.append( "\nUser terminated connection" );
enter.setEnabled( false );
output.close();
input.close();
connection.close();
++counter;
catch ( EOFException eof ) {
System.out.println( "Client terminated connection" );
catch ( IOException io ) {
io.printStackTrace();
private void sendData( String s )
try {
output.writeBytes( "SERVER>>> " + s );
display.append( "\nSERVER>>>" + s );
catch ( IOException cnfex ) {
display.append(
"\nError writing object" );
public static void main( String args[] )
Server app = new Server();
app.addWindowListener(
new WindowAdapter() {
public void windowClosing( WindowEvent e )
System.exit( 0 );
app.runServer();
// Fig. 21.4: Client.java
// Set up a Client that will read information sent
// from a Server and display the information.
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.zip.*;
public class Client extends Applet implements ActionListener {
private TextField enter;
private TextArea display;
DataOutputStream output;
DataInputStream input;
private Button button, button2;
URLConnection connection;
private byte[] bytes1, bytes2;
private String message, message2;
public void init()
setLayout( new BorderLayout() );
enter = new TextField( " Enter text here " );
enter.setEnabled( false );
enter.addActionListener( this );
add( enter, BorderLayout.NORTH );
display = new TextArea( 4, 30 );
display.setEditable( false );
add( display, BorderLayout.CENTER );
button = new Button( "Connect" );
button.addActionListener( this );
add( button, BorderLayout.SOUTH );
public void runClient()
Socket client;
try {
// Step 1: Create a Socket to make connection.
display.setText( "Attempting connection\n" );
URL currentpage = getCodeBase();
String protocol = currentpage.getProtocol();
String host = currentpage.getHost();
int port = 8100;
String urlsuffix = "/servlet/SocketServlet";
URL dataurl = new URL( "http://localhost:8100/servlet/SocketServlet" );
connection = dataurl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-type", "application/octet-stream");
connection.setUseCaches( false );
display.append( "\nConnected to: " + host );
// Step 2: Get the output streams.
output = new DataOutputStream(
connection.getOutputStream() );
display.append( "\n got output stream\n" );
// Step 3 get input connection
try
display.append( "\nAttempting to connect to input stream\n" );
input = new DataInputStream( connection.getInputStream() );
bytes1 = new byte[1024];
input.readFully( bytes1 );
display.append( "\nGot input stream\n" );
message = new String( bytes1 );
display.append( "\n" + message + "\n" );
catch ( IOException ioex )
// Step 3: Process connection.
enter.setEnabled( true );
do {
try {
bytes2 = new byte[1024];
input.readFully( bytes2 );
message2 = new String( bytes2 );
display.append( "\n" + message2 );
display.setCaretPosition(
display.getText().length() );
catch ( IOException ioex ) {
display.append(
"\nUnknown object type received" );
} while ( !message.equals( "SERVER>>> TERMINATE" ) );
// Step 4: Close connection.
display.append( "Closing connection.\n" );
output.close();
input.close();
catch (MalformedURLException mfe )
catch ( EOFException eof ) {
System.out.println( "Server terminated connection" );
catch ( IOException e ) {
e.printStackTrace();
private void sendData( String s )
try {
message = s;
output.writeBytes( "CLIENT>>> " + s );
display.append( "\nCLIENT>>>" + s );
catch ( IOException cnfex ) {
display.append(
"\nError writing object" );
public void actionPerformed( ActionEvent e )
if ( e.getActionCommand() == "Connect" )
runClient();
else
sendData( e.getActionCommand() );
public static void main(String args[])
Frame f = new Frame("Chat Client");
Client c = new Client();
c.init();
f.add("Center", c);
f.setSize(300, 150);
f.show();
the connection appears to fail at client step 3, any help is super, thanks
AidanHi,
In your client you are trying to open OutputStream even though you are not using it.
So there are two solutions here.
1. If you dont need OutputStream your code shoud look like this
try {
// Step 1: Create a Socket to make connection.
display.setText( "Attempting connection\n" );
URL currentpage = getCodeBase();
String protocol = currentpage.getProtocol();
String host = currentpage.getHost();
int port = 8100;
String urlsuffix = "/servlet/SocketServlet";
URL dataurl = new URL( "http://localhost:8100/servlet/SocketServlet" );
connection = dataurl.openConnection();
//connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-type", "application/octet-stream");
connection.setUseCaches( false );
display.append( "\nConnected to: " + host );
// Step 2: Get the output streams.
//output = new DataOutputStream(
//connection.getOutputStream() );
//display.append( "\n got output stream\n" );
display.append( "\n Not interested in output stream\n" );
//Step 3 Inpustream related
// Step 4: Close connection.
display.append( "Closing connection.\n" );
//output.close();
input.close();
1. If you need OutputStream, close your OutputStream before even trying to get InputStream, your code should like this
try {
// Step 1: Create a Socket to make connection.
display.setText( "Attempting connection\n" );
URL currentpage = getCodeBase();
String protocol = currentpage.getProtocol();
String host = currentpage.getHost();
int port = 8100;
String urlsuffix = "/servlet/SocketServlet";
URL dataurl = new URL( "http://localhost:8100/servlet/SocketServlet" );
connection = dataurl.openConnection();
//connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestProperty("Content-type", "application/octet-stream");
connection.setUseCaches( false );
display.append( "\nConnected to: " + host );
// Step 2: Get the output streams.
output = new DataOutputStream(
connection.getOutputStream() );
display.append( "\n got output stream\n" );
//I'll do whateve I've to do with outputstream
//done with output stream closing
output.close();
//Step 3 Inpustream related
// Step 4: Close connection.
display.append( "Closing connection.\n" );
//output.close();
input.close();
hope this works
all the best,
Raj -
I'm facing some problems while doing http tunneling thru proxy and below I'm giving some trace messages.
Without proxy the system seems to work ok.
Client -------- proxy ------- Tunnel Server --------- Server
The tunnel server tries to send back the data to client on the http connection.
The client is trying to receive data on the http connection.
The tunnel forwarder throws the following exception. Basically the tunnel forwarder thinks that the socket is closed immediately.
java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(Native Method)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream.setBlockData(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at TunnelForwarder.run(TunnelForwarder.java:108)
java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(Native Method)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.ObjectOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream.setBlockData(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at TunnelForwarder.run
The client throws the following exception. It thinks that the httpConnection is down immediately.
java.net.SocketException: Unexpected end of file from server
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)
at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.plugin.protocol.jdk12.http.HttpURLConnection.getInputStream(Unknown Source)
at TunnelReader.establishConnectionPath(TunnelReader.java:98)
at TunnelReader.run(TunnelReader.java:124)
java.lang.NullPointerException
at TunnelReader.run(TunnelReader.java:130)
However, the tunnel server shows that the tunnel is maintained
And even the netstat -n shows that the connection exists
C:\WINNT>netstat -n
Active Connections
Proto Local Address Foreign Address State
|
|
TCP tunnelServer:3299 server:12000 ESTABLISHED
|
|
TCP tunnelServer:9000 proxy:48040 ESTABLISHED
|
|
The http connection is actually brought down by the proxy after a considerably long time (more than a minute).
Regards,
Rahuole pawerDo not try base your tunnel on urlConnections. After you send the message, you cannot read. The only way is to use 2 connections, because all the proxy servers support only HTTP/1.0, which was depricated by W3C in 1996 after HTTP/1.1 was accomplished. If your proxy does you are lucky. To make your tunnel working over HTTP/1.0 is terrible task of TCP stack rewriting in Java. May be someone has it implemented already. I am interested to look after.
-
Hi There,
Please can someone tell me how to specify a variable in the path prefix of an External HTTP (RFC) connection in transaction SM59?
For example if my path prefix is /invoke/test/example?input=XYZ; how do I replace "XYZ" with a variable so that I can pass in any value after "=" ?
Thanks,
BrendonHi,
This is SAP Business one system administration forum. Please find correct forum and repost above discussion to get quick assistance.
Please close this thread here with helpful answer.
Thanks & Regards,
Nagarajan -
Http tunneling (t3 over http) doesn't work!! (examples too)
Hi,
I'm trying to get http tunneling (t3 connection over http protocol) to work. I
ran some examples included with Weblogic that try establishing that connection
(PingTest, HelloApplet, SimpleT3Client), as well as my own test program, and they
all give an error similar to this :
Couldn't get a reference to server. Exception :
javax.naming.CommunicationException. Root exception is java.net.ConnectException:
No server found at HTTP://<IP>:<port>
at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:161) at weblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:200)
at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java,
Compiled Code) at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:148)
at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:123)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671) at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:242) at javax.naming.InitialContext.init(InitialContext.java:218)
at javax.naming.InitialContext.<init>(InitialContext.java:194)
(I replaced the actual Ip and port with <IP> and <port>).
Now, the server is started and working at that ip and port - it services web http
requests correctly, etc. Regular T3 connection (not over http) also works with
it.
Does anyone know the reason for this problem and/or how to fix it?
Thanks, Leonid PortnoyIt appears that one has to use the "Java Plugin" for this mode to work. The
question is does the version of plugin need to be "in sync" with the JVM
version on the server. ?.
/rk
"Adomas Svirskas" <[email protected]> wrote in message
news:[email protected]...
>
It seems that the solution is to have these two lines in the
properties file:
weblogic.httpd.enable=true
weblogic.httpd.tunnelingenabled=true
Now it works.
Thanks,
Adomas
"Adomas Svirskas" <[email protected]> wrote:
Hi Leonid,
Have you found a solution for this? I have these problems too.
Thanks,
Adomas
"Leonid Portnoy" <[email protected]> wrote:
Hi,
I'm trying to get http tunneling (t3 connection over http protocol)to
work. I
ran some examples included with Weblogic that try establishing thatconnection
(PingTest, HelloApplet, SimpleT3Client), as well as my own test program,
and they
all give an error similar to this :
Couldn't get a reference to server. Exception :
javax.naming.CommunicationException. Root exception is
java.net.ConnectException:
No server found at HTTP://<IP>:<port>
at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:161) atweblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:200)
atweblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialCon
textFactoryDelegate.java,
Compiled Code) atweblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialCon
textFactoryDelegate.java:148)
atweblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFact
ory.java:123)
atjavax.naming.spi.NamingManager.getInitialContext(NamingManager.java:671)
at
javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:242)
at javax.naming.InitialContext.init(InitialContext.java:218)
at javax.naming.InitialContext.<init>(InitialContext.java:194)
(I replaced the actual Ip and port with <IP> and <port>).
Now, the server is started and working at that ip and port - it services
web http
requests correctly, etc. Regular T3 connection (not over http) alsoworks
with
it.
Does anyone know the reason for this problem and/or how to fix it?
Thanks, Leonid Portnoy
Maybe you are looking for
-
I am looking for a report where an IR is created for a GR and it must also show if no IR is created for a GR, if there is something that is SAP standard, it will be great, if not, the knowing the tables will also help, this way I can write the report
-
Is it possible to get my iTunes money out of one account and put it into another account?
So I bought a Macbook Pro recently and a lady, who was working at the Apple Store, was putting in a Back to School giftcard for $100 in my account but I forgot the answers to my security questions. Since the lady already have put that money in that a
-
My brand new iPod touch 4g cannot sync from iTunes 10.5
Hi all, Just bought a brand new iPod touch 4gen And I try to set up a new iPod and it won't let me sync any music ,apps,or anything to the iPod It only got one button available on the bottom which is revert. When I click the button don't have any cha
-
If I have a 16G 4S and purchase iTunes Match, how will I acess all my music if its 50G?
I want to purchase iTunes Match as I have over 50G of music. However, my new iPhone 4S is only 16G. How does that work?
-
What is procedure to transfer my http site https
what is procedure to transfer my http site https i am using tomcat4