Class BlockingUDPTransport
- java.lang.Object
-
- org.epics.pvaccess.impl.remote.udp.BlockingUDPTransport
-
- All Implemented Interfaces:
Closeable,AutoCloseable,Channel,Transport,TransportSendControl,org.epics.pvdata.pv.DeserializableControl,org.epics.pvdata.pv.SerializableControl
public class BlockingUDPTransport extends Object implements Transport, TransportSendControl
PVA UDP transport implementation.- Version:
- $Id$
- Author:
- Matej Sekoranja
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classBlockingUDPTransport.InetAddressTypeInetAddress type.
-
Field Summary
Fields Modifier and Type Field Description protected booleanclosedClosed status.protected ResponseHandlerresponseHandlerResponse handler.
-
Constructor Summary
Constructors Constructor Description BlockingUDPTransport(Context context, ResponseHandler responseHandler, DatagramChannel channel, InetSocketAddress bindAddress, InetSocketAddress[] sendAddresses, short remoteTransportRevision)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanacquire(TransportClient client)Acquires transport.voidalignBuffer(int alignment)voidalignData(int alignment)voidaliveNotification()Alive notification.voidauthNZInitialize(Object data)Used to initialize authNZ (select security plug-in).voidauthNZMessage(org.epics.pvdata.pv.PVField data)Pass data to the active security plug-in session.org.epics.pvdata.pv.FieldcachedDeserialize(ByteBuffer buffer)voidcachedSerialize(org.epics.pvdata.pv.Field field, ByteBuffer buffer)voidchangedTransport()Notification that transport has changed (server restarted).voidclose()Close transport.voidendMessage()voidenqueueSendRequest(TransportSender sender)Enqueue send request.voidensureBuffer(int size)voidensureData(int size)booleanflush()Flush...voidflush(boolean lastMessageCompleted)voidflushSerializeBuffer()InetSocketAddressgetBindAddress()Get bind address.ContextgetContext()Get context transport is living in.InetSocketAddress[]getIgnoredAddresses()Get list of ignored addresses.shortgetPriority()Transport priority.intgetReceiveBufferSize()Get receive buffer size.InetSocketAddressgetRemoteAddress()Get remote address.bytegetRevision()Transport protocol revision.SecurityPlugin.SecuritySessiongetSecuritySession()InetSocketAddress[]getSendAddresses()Get list of send addresses.intgetSocketReceiveBufferSize()Get socket receive buffer size.StringgetType()Get protocol type (e.g.booleanisOpen()MembershipKeyjoin(InetAddress group, NetworkInterface nif)protected voidprocessRead()Process input (read) IO event.protected voidprocessWrite()Process output (write) IO event.voidrelease(TransportClient client)Releases transport.booleansend(ByteBuffer buffer)Send a buffer through the transport.voidsend(ByteBuffer buffer, InetSocketAddress address)Send a buffer through the transport immediately.booleansend(ByteBuffer buffer, BlockingUDPTransport.InetAddressType target)Send a buffer through the transport.voidsetByteOrder(ByteOrder byteOrder)Set byte order.voidsetIgnoredAddresses(InetSocketAddress[] addresses)Set ignore list.voidsetMutlicastNIF(NetworkInterface nif, boolean loopback)voidsetRecipient(InetSocketAddress sendTo)voidsetRemoteRevision(byte minor)Set remote transport protocol revision.voidsetRemoteTransportReceiveBufferSize(int receiveBufferSize)Set remote transport receive buffer size.voidsetRemoteTransportSocketReceiveBufferSize(int socketReceiveBufferSize)Set remote transport socket receive buffer size.voidsetSendAddresses(InetSocketAddress[] addresses)Set list of send addresses.voidstart()Start processing requests.voidstartMessage(byte command, int ensureCapacity)voidverified(org.epics.pvdata.pv.Status status)Acknowledge that transport was verified.booleanverify(long timeoutMs)Waits (if needed) until transport is verified, i.e.
-
-
-
Field Detail
-
responseHandler
protected final ResponseHandler responseHandler
Response handler.
-
closed
protected volatile boolean closed
Closed status.
-
-
Constructor Detail
-
BlockingUDPTransport
public BlockingUDPTransport(Context context, ResponseHandler responseHandler, DatagramChannel channel, InetSocketAddress bindAddress, InetSocketAddress[] sendAddresses, short remoteTransportRevision)
-
-
Method Detail
-
start
public void start()
Start processing requests.
-
close
public void close() throws IOExceptionClose transport.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceChannel- Specified by:
closein interfaceCloseable- Throws:
IOException
-
acquire
public boolean acquire(TransportClient client)
Description copied from interface:TransportAcquires transport.
-
release
public void release(TransportClient client)
Description copied from interface:TransportReleases transport.
-
processRead
protected void processRead()
Process input (read) IO event.
-
processWrite
protected void processWrite()
Process output (write) IO event.
-
send
public boolean send(ByteBuffer buffer, BlockingUDPTransport.InetAddressType target)
Send a buffer through the transport.- Parameters:
buffer- buffer to send.target- filter (selector) of what addresses to use when sending.- Returns:
- success status.
-
send
public boolean send(ByteBuffer buffer)
Send a buffer through the transport.- Parameters:
buffer- buffer to send.- Returns:
- success status.
-
send
public void send(ByteBuffer buffer, InetSocketAddress address)
Send a buffer through the transport immediately.- Parameters:
buffer- buffer to send.address- send address.
-
join
public MembershipKey join(InetAddress group, NetworkInterface nif) throws IOException
- Throws:
IOException
-
setMutlicastNIF
public void setMutlicastNIF(NetworkInterface nif, boolean loopback) throws IOException
- Throws:
IOException
-
getRevision
public byte getRevision()
Description copied from interface:TransportTransport protocol revision.- Specified by:
getRevisionin interfaceTransport- Returns:
- protocol revision.
- See Also:
Transport.getRevision()
-
getType
public String getType()
Get protocol type (e.g. tpc, udp, ssl, etc.).- Specified by:
getTypein interfaceTransport- Returns:
- protocol type.
- See Also:
Transport.getType()
-
changedTransport
public void changedTransport()
Description copied from interface:TransportNotification that transport has changed (server restarted).- Specified by:
changedTransportin interfaceTransport- See Also:
Transport.changedTransport()
-
getContext
public Context getContext()
Description copied from interface:TransportGet context transport is living in.- Specified by:
getContextin interfaceTransport- Returns:
- context transport is living in.
- See Also:
Transport.getContext()
-
getPriority
public short getPriority()
Description copied from interface:TransportTransport priority.- Specified by:
getPriorityin interfaceTransport- Returns:
- protocol priority.
- See Also:
Transport.getPriority()
-
flush
public boolean flush()
Flush...- Returns:
- success status.
-
getRemoteAddress
public InetSocketAddress getRemoteAddress()
Description copied from interface:TransportGet remote address.- Specified by:
getRemoteAddressin interfaceTransport- Returns:
- remote address.
- See Also:
Transport.getRemoteAddress()
-
getSendAddresses
public InetSocketAddress[] getSendAddresses()
Get list of send addresses.- Returns:
- send addresses.
-
getIgnoredAddresses
public InetSocketAddress[] getIgnoredAddresses()
Get list of ignored addresses.- Returns:
- ignored addresses.
-
getBindAddress
public InetSocketAddress getBindAddress()
Get bind address.- Returns:
- bind address.
-
setSendAddresses
public void setSendAddresses(InetSocketAddress[] addresses)
Set list of send addresses.- Parameters:
addresses- list of send addresses, non-null.
-
setIgnoredAddresses
public void setIgnoredAddresses(InetSocketAddress[] addresses)
Set ignore list.- Parameters:
addresses- list of ignored addresses.
-
getReceiveBufferSize
public int getReceiveBufferSize()
Description copied from interface:TransportGet receive buffer size.- Specified by:
getReceiveBufferSizein interfaceTransport- Returns:
- receive buffer size.
- See Also:
Transport.getReceiveBufferSize()
-
setRemoteRevision
public void setRemoteRevision(byte minor)
Description copied from interface:TransportSet remote transport protocol revision.- Specified by:
setRemoteRevisionin interfaceTransport- Parameters:
minor- protocol revision.
-
setRemoteTransportReceiveBufferSize
public void setRemoteTransportReceiveBufferSize(int receiveBufferSize)
Description copied from interface:TransportSet remote transport receive buffer size.- Specified by:
setRemoteTransportReceiveBufferSizein interfaceTransport- Parameters:
receiveBufferSize- receive buffer size.- See Also:
Transport.setRemoteTransportReceiveBufferSize(int)
-
setRemoteTransportSocketReceiveBufferSize
public void setRemoteTransportSocketReceiveBufferSize(int socketReceiveBufferSize)
Description copied from interface:TransportSet remote transport socket receive buffer size.- Specified by:
setRemoteTransportSocketReceiveBufferSizein interfaceTransport- Parameters:
socketReceiveBufferSize- remote socket receive buffer size.- See Also:
Transport.setRemoteTransportSocketReceiveBufferSize(int)
-
getSocketReceiveBufferSize
public int getSocketReceiveBufferSize()
Description copied from interface:TransportGet socket receive buffer size.- Specified by:
getSocketReceiveBufferSizein interfaceTransport- Returns:
- socket receive buffer size.
- See Also:
Transport.getSocketReceiveBufferSize()
-
enqueueSendRequest
public final void enqueueSendRequest(TransportSender sender)
Description copied from interface:TransportEnqueue send request.- Specified by:
enqueueSendRequestin interfaceTransport- Parameters:
sender- sender to enqueue.
-
ensureBuffer
public void ensureBuffer(int size)
- Specified by:
ensureBufferin interfaceorg.epics.pvdata.pv.SerializableControl
-
alignBuffer
public void alignBuffer(int alignment)
- Specified by:
alignBufferin interfaceorg.epics.pvdata.pv.SerializableControl
-
flushSerializeBuffer
public void flushSerializeBuffer()
- Specified by:
flushSerializeBufferin interfaceorg.epics.pvdata.pv.SerializableControl
-
flush
public void flush(boolean lastMessageCompleted)
- Specified by:
flushin interfaceTransportSendControl
-
startMessage
public final void startMessage(byte command, int ensureCapacity)- Specified by:
startMessagein interfaceTransportSendControl
-
endMessage
public final void endMessage()
- Specified by:
endMessagein interfaceTransportSendControl
-
setRecipient
public final void setRecipient(InetSocketAddress sendTo)
- Specified by:
setRecipientin interfaceTransportSendControl
-
ensureData
public void ensureData(int size)
- Specified by:
ensureDatain interfaceorg.epics.pvdata.pv.DeserializableControl
-
cachedSerialize
public void cachedSerialize(org.epics.pvdata.pv.Field field, ByteBuffer buffer)- Specified by:
cachedSerializein interfaceorg.epics.pvdata.pv.SerializableControl
-
cachedDeserialize
public org.epics.pvdata.pv.Field cachedDeserialize(ByteBuffer buffer)
- Specified by:
cachedDeserializein interfaceorg.epics.pvdata.pv.DeserializableControl
-
alignData
public void alignData(int alignment)
- Specified by:
alignDatain interfaceorg.epics.pvdata.pv.DeserializableControl
-
setByteOrder
public void setByteOrder(ByteOrder byteOrder)
Description copied from interface:TransportSet byte order.- Specified by:
setByteOrderin interfaceTransport- Parameters:
byteOrder- byte order to set.
-
verify
public boolean verify(long timeoutMs)
Description copied from interface:TransportWaits (if needed) until transport is verified, i.e. verified() method is being called.
-
verified
public void verified(org.epics.pvdata.pv.Status status)
Description copied from interface:TransportAcknowledge that transport was verified.
-
aliveNotification
public void aliveNotification()
Description copied from interface:TransportAlive notification. This method needs to be called (by newly received data or beacon) at least once in this period, if not echo will be issued and if there is not response to it, transport will be considered as unresponsive.- Specified by:
aliveNotificationin interfaceTransport
-
authNZMessage
public void authNZMessage(org.epics.pvdata.pv.PVField data)
Description copied from interface:TransportPass data to the active security plug-in session.- Specified by:
authNZMessagein interfaceTransport- Parameters:
data- the data (any data), can benull.
-
authNZInitialize
public void authNZInitialize(Object data)
Description copied from interface:TransportUsed to initialize authNZ (select security plug-in).- Specified by:
authNZInitializein interfaceTransport- Parameters:
data- any data.
-
getSecuritySession
public SecurityPlugin.SecuritySession getSecuritySession()
- Specified by:
getSecuritySessionin interfaceTransport
-
-