mirror of
https://github.com/fabianonline/telegram_backup.git
synced 2025-07-01 04:46:25 +00:00
First commit: Just a collection of library sources from Github. Compiles, but doesn't work.
This commit is contained in:
91
src/org/telegram/mtproto/transport/PlainTcpConnection.java
Normal file
91
src/org/telegram/mtproto/transport/PlainTcpConnection.java
Normal file
@ -0,0 +1,91 @@
|
||||
package org.telegram.mtproto.transport;
|
||||
|
||||
import org.telegram.mtproto.log.Logger;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
|
||||
import static org.telegram.tl.StreamingUtils.readBytes;
|
||||
import static org.telegram.tl.StreamingUtils.writeByte;
|
||||
import static org.telegram.tl.StreamingUtils.writeByteArray;
|
||||
|
||||
/**
|
||||
* Created with IntelliJ IDEA.
|
||||
* User: ex3ndr
|
||||
* Date: 03.11.13
|
||||
* Time: 5:04
|
||||
*/
|
||||
public class PlainTcpConnection {
|
||||
private static final String TAG = "PlainTcpConnection";
|
||||
|
||||
private static final int CONNECTION_TIMEOUT = 5 * 1000;
|
||||
|
||||
private Socket socket;
|
||||
|
||||
private boolean isBroken;
|
||||
|
||||
public PlainTcpConnection(String ip, int port) throws IOException {
|
||||
this.socket = new Socket();
|
||||
this.socket.connect(new InetSocketAddress(ip, port), CONNECTION_TIMEOUT);
|
||||
this.socket.setKeepAlive(true);
|
||||
this.socket.setTcpNoDelay(true);
|
||||
this.socket.getOutputStream().write(0xef);
|
||||
this.isBroken = false;
|
||||
}
|
||||
|
||||
public Socket getSocket() {
|
||||
return socket;
|
||||
}
|
||||
|
||||
private byte[] readMessage() throws IOException {
|
||||
InputStream stream = socket.getInputStream();
|
||||
int headerLen = readByte(stream);
|
||||
|
||||
if (headerLen == 0x7F) {
|
||||
headerLen = readByte(stream) + (readByte(stream) << 8) + (readByte(stream) << 16);
|
||||
}
|
||||
int len = headerLen * 4;
|
||||
return readBytes(len, stream);
|
||||
}
|
||||
|
||||
private void writeMessage(byte[] request) throws IOException {
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
if (request.length / 4 >= 0x7F) {
|
||||
int len = request.length / 4;
|
||||
writeByte(0x7F, stream);
|
||||
writeByte(len & 0xFF, stream);
|
||||
writeByte((len >> 8) & 0xFF, stream);
|
||||
writeByte((len >> 16) & 0xFF, stream);
|
||||
} else {
|
||||
writeByte(request.length / 4, stream);
|
||||
}
|
||||
writeByteArray(request, stream);
|
||||
byte[] pkg = stream.toByteArray();
|
||||
socket.getOutputStream().write(pkg, 0, pkg.length);
|
||||
socket.getOutputStream().flush();
|
||||
}
|
||||
|
||||
public byte[] executeMethod(byte[] request) throws IOException {
|
||||
writeMessage(request);
|
||||
return readMessage();
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
try {
|
||||
socket.close();
|
||||
} catch (IOException e) {
|
||||
Logger.e(TAG, e);
|
||||
}
|
||||
}
|
||||
|
||||
private int readByte(InputStream stream) throws IOException {
|
||||
int res = stream.read();
|
||||
if (res < 0) {
|
||||
throw new IOException();
|
||||
}
|
||||
return res;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user