Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 3c2788b

Browse files
committed
WIP: Refactor sockets
1 parent d39b607 commit 3c2788b

38 files changed

+916
-523
lines changed

asterisk-java-all/src/main/java/org/asteriskjava/fastagi/DefaultAgiServer.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
*/
1717
package org.asteriskjava.fastagi;
1818

19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2020
import org.asteriskjava.fastagi.internal.AgiConnectionHandler;
2121
import org.asteriskjava.fastagi.internal.DefaultAgiChannelFactory;
2222
import org.asteriskjava.fastagi.internal.FastAgiConnectionHandler;
23-
import org.asteriskjava.util.*;
23+
import org.asteriskjava.util.Log;
24+
import org.asteriskjava.util.LogFactory;
25+
import org.asteriskjava.util.ReflectionUtil;
26+
import org.asteriskjava.util.ServerSocketFacade;
2427
import org.asteriskjava.util.internal.ServerSocketFacadeImpl;
25-
import org.asteriskjava.util.internal.SocketConnectionFacadeImpl;
2628

2729
import java.io.IOException;
2830
import java.net.InetAddress;
@@ -68,7 +70,7 @@ public class DefaultAgiServer extends AbstractAgiServer implements AgiServer {
6870
*
6971
* @see Socket#setSoTimeout(int)
7072
*/
71-
private int socketReadTimeout = SocketConnectionFacadeImpl.MAX_SOCKET_READ_TIMEOUT_MILLIS;
73+
private int socketReadTimeout = 10800000;
7274

7375
/**
7476
* Creates a new DefaultAgiServer.
@@ -160,7 +162,7 @@ public DefaultAgiServer(String configResourceBundleName, MappingStrategy mapping
160162
compositeMappingStrategy.addStrategy(new ClassNameMappingStrategy());
161163
if (ReflectionUtil.isClassAvailable("javax.script.ScriptEngineManager")) {
162164
MappingStrategy scriptEngineMappingStrategy = (MappingStrategy) ReflectionUtil
163-
.newInstance("org.asteriskjava.fastagi.ScriptEngineMappingStrategy");
165+
.newInstance("org.asteriskjava.fastagi.ScriptEngineMappingStrategy");
164166
if (scriptEngineMappingStrategy != null) {
165167
compositeMappingStrategy.addStrategy(scriptEngineMappingStrategy);
166168
}
@@ -302,7 +304,7 @@ public void startup() throws IOException, IllegalStateException {
302304
// loop will be terminated by accept() throwing an IOException when the
303305
// ServerSocket is closed.
304306
while (true) {
305-
final SocketConnectionFacade socket;
307+
final SocketConnectionAdapter socket;
306308

307309
// accept connection
308310
try {
@@ -321,7 +323,7 @@ public void startup() throws IOException, IllegalStateException {
321323

322324
// execute connection handler
323325
final AgiConnectionHandler connectionHandler = new FastAgiConnectionHandler(getMappingStrategy(), socket,
324-
this.getAgiChannelFactory());
326+
this.getAgiChannelFactory());
325327
try {
326328
execute(connectionHandler);
327329
} catch (RejectedExecutionException e) {

asterisk-java-all/src/main/java/org/asteriskjava/fastagi/internal/FastAgiConnectionHandler.java

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616
*/
1717
package org.asteriskjava.fastagi.internal;
1818

19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2020
import org.asteriskjava.fastagi.AgiChannelFactory;
2121
import org.asteriskjava.fastagi.AgiReader;
2222
import org.asteriskjava.fastagi.AgiWriter;
2323
import org.asteriskjava.fastagi.MappingStrategy;
2424

25-
import java.io.IOException;
26-
2725
/**
2826
* An AgiConnectionHandler for FastAGI.
2927
* <br>
@@ -37,7 +35,7 @@ public class FastAgiConnectionHandler extends AgiConnectionHandler {
3735
/**
3836
* The socket connection.
3937
*/
40-
private final SocketConnectionFacade socket;
38+
private final SocketConnectionAdapter socket;
4139

4240
/**
4341
* Creates a new FastAGIConnectionHandler to handle the given FastAGI socket connection.
@@ -46,7 +44,7 @@ public class FastAgiConnectionHandler extends AgiConnectionHandler {
4644
* @param socket the socket connection to handle.
4745
* @param agiChannelFactory The factory to use for creating new AgiChannel instances.
4846
*/
49-
public FastAgiConnectionHandler(MappingStrategy mappingStrategy, SocketConnectionFacade socket, AgiChannelFactory agiChannelFactory) {
47+
public FastAgiConnectionHandler(MappingStrategy mappingStrategy, SocketConnectionAdapter socket, AgiChannelFactory agiChannelFactory) {
5048
super(mappingStrategy, agiChannelFactory);
5149
this.socket = socket;
5250
}
@@ -65,7 +63,7 @@ protected AgiWriter createWriter() {
6563
public void release() {
6664
try {
6765
socket.close();
68-
} catch (IOException e) // NOPMD
66+
} catch (Exception e) // NOPMD
6967
{
7068
// swallow
7169
}

asterisk-java-all/src/main/java/org/asteriskjava/fastagi/internal/FastAgiReader.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package org.asteriskjava.fastagi.internal;
1818

19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2020
import org.asteriskjava.fastagi.*;
2121
import org.asteriskjava.fastagi.reply.AgiReply;
2222

@@ -31,9 +31,9 @@
3131
* @version $Id$
3232
*/
3333
class FastAgiReader implements AgiReader {
34-
private final SocketConnectionFacade socket;
34+
private final SocketConnectionAdapter socket;
3535

36-
FastAgiReader(SocketConnectionFacade socket) {
36+
FastAgiReader(SocketConnectionAdapter socket) {
3737
this.socket = socket;
3838
}
3939

@@ -45,7 +45,7 @@ public AgiRequest readRequest() throws AgiException {
4545
lines = new ArrayList<>();
4646

4747
try {
48-
while ((line = socket.readLine()) != null) {
48+
while ((line = socket.read()) != null) {
4949
if (line.length() == 0) {
5050
break;
5151
}
@@ -73,7 +73,7 @@ public AgiReply readReply() throws AgiException {
7373
lines = new ArrayList<>();
7474

7575
try {
76-
line = socket.readLine();
76+
line = socket.read();
7777
} catch (IOException e) {
7878
// readline throws IOException if the connection has been closed
7979
throw new AgiHangupException();
@@ -98,7 +98,7 @@ public AgiReply readReply() throws AgiException {
9898
// read synopsis and usage if statuscode is 520
9999
if (line.startsWith(Integer.toString(AgiReply.SC_INVALID_COMMAND_SYNTAX))) {
100100
try {
101-
while ((line = socket.readLine()) != null) {
101+
while ((line = socket.read()) != null) {
102102
lines.add(line);
103103
if (line.startsWith(Integer.toString(AgiReply.SC_INVALID_COMMAND_SYNTAX))) {
104104
break;

asterisk-java-all/src/main/java/org/asteriskjava/fastagi/internal/FastAgiWriter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package org.asteriskjava.fastagi.internal;
1818

19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2020
import org.asteriskjava.fastagi.AgiException;
2121
import org.asteriskjava.fastagi.AgiNetworkException;
2222
import org.asteriskjava.fastagi.AgiWriter;
@@ -32,9 +32,9 @@
3232
* @version $Id$
3333
*/
3434
class FastAgiWriter implements AgiWriter {
35-
private final SocketConnectionFacade socket;
35+
private final SocketConnectionAdapter socket;
3636

37-
FastAgiWriter(SocketConnectionFacade socket) {
37+
FastAgiWriter(SocketConnectionAdapter socket) {
3838
this.socket = socket;
3939
}
4040

asterisk-java-all/src/main/java/org/asteriskjava/manager/internal/ManagerConnectionImpl.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
package org.asteriskjava.manager.internal;
1717

1818
import org.asteriskjava.AsteriskVersion;
19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketBuilder;
20+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2021
import org.asteriskjava.lock.Lockable;
2122
import org.asteriskjava.lock.LockableList;
2223
import org.asteriskjava.lock.LockableMap;
@@ -29,7 +30,6 @@
2930
import org.asteriskjava.util.DateUtil;
3031
import org.asteriskjava.util.Log;
3132
import org.asteriskjava.util.LogFactory;
32-
import org.asteriskjava.util.internal.SocketConnectionFacadeImpl;
3333

3434
import java.io.IOException;
3535
import java.io.Serializable;
@@ -39,13 +39,15 @@
3939
import java.nio.charset.StandardCharsets;
4040
import java.security.MessageDigest;
4141
import java.security.NoSuchAlgorithmException;
42+
import java.time.Duration;
4243
import java.util.ArrayList;
4344
import java.util.HashMap;
4445
import java.util.List;
4546
import java.util.concurrent.CountDownLatch;
4647
import java.util.concurrent.TimeUnit;
4748
import java.util.concurrent.atomic.AtomicLong;
4849

50+
import static org.asteriskjava.core.socket.scanner.SocketScanner.NewlineDelimiter.CRLF;
4951
import static org.asteriskjava.manager.ManagerConnectionState.*;
5052

5153
/**
@@ -164,7 +166,7 @@ public class ManagerConnectionImpl extends Lockable implements ManagerConnection
164166
/**
165167
* The socket to use for TCP/IP communication with Asterisk.
166168
*/
167-
private SocketConnectionFacade socket;
169+
private SocketConnectionAdapter socket;
168170

169171
/**
170172
* The thread that runs the reader.
@@ -668,8 +670,19 @@ protected void connect() throws IOException {
668670
}
669671
}
670672

671-
protected SocketConnectionFacade createSocket() throws IOException {
672-
return new SocketConnectionFacadeImpl(hostname, port, ssl, socketTimeout, socketReadTimeout, encoding);
673+
protected SocketConnectionAdapter createSocket() throws IOException {
674+
Socket socket = SocketBuilder.builder()
675+
.hostname(hostname)
676+
.port(port)
677+
.ssl(ssl)
678+
.connectionTimeout(Duration.ofMillis(socketTimeout))
679+
.build();
680+
681+
return SocketConnectionAdapter.builder(socket)
682+
.readTimeout(Duration.ofMillis(socketReadTimeout))
683+
.charset(encoding)
684+
.newlineDelimiter(CRLF)
685+
.build();
673686
}
674687

675688
public void logoff() throws IllegalStateException {
@@ -702,7 +715,7 @@ protected void disconnect() {
702715
logger.info("Closing socket.");
703716
try {
704717
socket.close();
705-
} catch (IOException ex) {
718+
} catch (Exception ex) {
706719
logger.warn("Unable to close socket: " + ex.getMessage());
707720
}
708721
socket = null;

asterisk-java-all/src/main/java/org/asteriskjava/manager/internal/ManagerReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package org.asteriskjava.manager.internal;
1818

19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2020
import org.asteriskjava.manager.event.ManagerEvent;
2121
import org.asteriskjava.manager.response.ManagerResponse;
2222

@@ -44,7 +44,7 @@ public interface ManagerReader extends Runnable {
4444
*
4545
* @param socket the socket to use for reading from the asterisk server.
4646
*/
47-
void setSocket(final SocketConnectionFacade socket);
47+
void setSocket(final SocketConnectionAdapter socket);
4848

4949
/**
5050
* Registers a new event type with the underlying EventBuilderImpl.

asterisk-java-all/src/main/java/org/asteriskjava/manager/internal/ManagerReaderImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.asteriskjava.manager.internal;
1818

1919
import com.google.common.util.concurrent.RateLimiter;
20-
import org.asteriskjava.core.socket.SocketConnectionFacade;
20+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2121
import org.asteriskjava.manager.event.DisconnectEvent;
2222
import org.asteriskjava.manager.event.ManagerEvent;
2323
import org.asteriskjava.manager.event.ProtocolIdentifierReceivedEvent;
@@ -66,7 +66,7 @@ public class ManagerReaderImpl implements ManagerReader {
6666
/**
6767
* The socket to use for reading from the asterisk server.
6868
*/
69-
private SocketConnectionFacade socket;
69+
private SocketConnectionAdapter socket;
7070

7171
/**
7272
* If set to <code>true</code>, terminates and closes the reader.
@@ -112,7 +112,7 @@ public ManagerReaderImpl(final Dispatcher dispatcher, Object source) {
112112
*
113113
* @param socket the socket to use for reading from the asterisk server.
114114
*/
115-
public void setSocket(final SocketConnectionFacade socket) {
115+
public void setSocket(final SocketConnectionAdapter socket) {
116116
this.socket = socket;
117117
}
118118

@@ -152,7 +152,7 @@ public void run() {
152152
RateLimiter slowEventLogLimiter = RateLimiter.create(4);
153153
try {
154154
// main loop
155-
while (!this.die && (line = socket.readLine()) != null) {
155+
while (!this.die && (line = socket.read()) != null) {
156156
// maybe we will find a better way to identify the protocol
157157
// identifier but for now
158158
// this works quite well.

asterisk-java-all/src/main/java/org/asteriskjava/manager/internal/ManagerWriter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.asteriskjava.manager.internal;
1818

1919
import org.asteriskjava.AsteriskVersion;
20-
import org.asteriskjava.core.socket.SocketConnectionFacade;
20+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2121
import org.asteriskjava.manager.action.ManagerAction;
2222

2323
import java.io.IOException;
@@ -47,7 +47,7 @@ public interface ManagerWriter {
4747
*
4848
* @param socket the socket to use for writing to Asterisk.
4949
*/
50-
void setSocket(final SocketConnectionFacade socket);
50+
void setSocket(final SocketConnectionAdapter socket);
5151

5252
/**
5353
* Sends the given action to the asterisk server.

asterisk-java-all/src/main/java/org/asteriskjava/manager/internal/ManagerWriterImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package org.asteriskjava.manager.internal;
1818

1919
import org.asteriskjava.AsteriskVersion;
20-
import org.asteriskjava.core.socket.SocketConnectionFacade;
20+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2121
import org.asteriskjava.lock.Lockable;
2222
import org.asteriskjava.lock.Locker.LockCloser;
2323
import org.asteriskjava.manager.action.ManagerAction;
@@ -42,7 +42,7 @@ public class ManagerWriterImpl extends Lockable implements ManagerWriter {
4242
*/
4343
private final ActionBuilder actionBuilder;
4444

45-
private SocketConnectionFacade socket;
45+
private SocketConnectionAdapter socket;
4646

4747
/**
4848
* Creates a new ManagerWriter.
@@ -55,7 +55,7 @@ public void setTargetVersion(AsteriskVersion version) {
5555
actionBuilder.setTargetVersion(version);
5656
}
5757

58-
public void setSocket(final SocketConnectionFacade socket) {
58+
public void setSocket(final SocketConnectionAdapter socket) {
5959
try (LockCloser closer = this.withLock()) {
6060
this.socket = socket;
6161
}

asterisk-java-all/src/main/java/org/asteriskjava/util/ServerSocketFacade.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
*/
1717
package org.asteriskjava.util;
1818

19-
import org.asteriskjava.core.socket.SocketConnectionFacade;
19+
import org.asteriskjava.core.socket.SocketConnectionAdapter;
2020

2121
import java.io.IOException;
2222

@@ -36,7 +36,7 @@ public interface ServerSocketFacade {
3636
* @return the new connection.
3737
* @throws IOException if an I/O error occurs when waiting for a connection.
3838
*/
39-
SocketConnectionFacade accept() throws IOException;
39+
SocketConnectionAdapter accept() throws IOException;
4040

4141
/**
4242
* Unbinds and closes the server socket.

0 commit comments

Comments
 (0)