blob: d8b0833a5aef0432c4d75990c1c1543d5f50024f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "DatagramPacket.h"
using namespace decaf;
using namespace decaf::net;
using namespace decaf::lang;
using namespace decaf::lang::exceptions;
using namespace decaf::util::concurrent;
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::DatagramPacket( unsigned char* bytes, int size, int length ) :
buffer(NULL), size(0), offset(0), length(0), address(NULL), port(-1), mutex() {
this->setData( bytes, size, 0, length );
}
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::DatagramPacket( unsigned char* bytes, int size, int offset, int length ) :
buffer(NULL), size(0), offset(0), length(0), address(NULL), port(-1), mutex() {
this->setData( bytes, size, offset, length );
}
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::DatagramPacket( unsigned char* bytes, int size, int offset, int length, const InetAddress& address DECAF_UNUSED, int port ) :
buffer(NULL), size(0), offset(0), length(0), address(NULL), port(port), mutex() {
this->setData( bytes, size, offset, length );
}
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::DatagramPacket( unsigned char* bytes, int size, int length, const InetAddress& address DECAF_UNUSED, int port ) :
buffer(NULL), size(0), offset(0), length(0), address(NULL), port(port), mutex() {
this->setData( bytes, size, 0, length );
}
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::DatagramPacket( unsigned char* bytes, int size, int length, const SocketAddress& address DECAF_UNUSED) :
buffer(NULL), size(0), offset(0), length(0), address(NULL), port(-1), mutex() {
this->setData( bytes, size, 0, length );
// TODO
}
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::DatagramPacket( unsigned char* bytes, int size, int offset, int length, const SocketAddress& address DECAF_UNUSED ) :
buffer(NULL), size(0), offset(0), length(0), address(NULL), port(-1), mutex() {
this->setData( bytes, size, offset, length );
// TODO
}
////////////////////////////////////////////////////////////////////////////////
DatagramPacket::~DatagramPacket() {
try{
delete this->address;
}
DECAF_CATCH_NOTHROW( Exception )
DECAF_CATCHALL_NOTHROW()
}
////////////////////////////////////////////////////////////////////////////////
InetAddress* DatagramPacket::getAddress() const {
InetAddress* result = 0;
synchronized( &mutex ) {
result = this->address;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setAddress( const InetAddress& address DECAF_UNUSED ) {
// TODO
}
////////////////////////////////////////////////////////////////////////////////
SocketAddress* DatagramPacket::getSocketAddress() const {
// TODO
return NULL;
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setSocketAddress( const SocketAddress& address DECAF_UNUSED ) {
// TODO
}
////////////////////////////////////////////////////////////////////////////////
int DatagramPacket::getPort() const {
int result = 0;
synchronized( &mutex ) {
result = this->port;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setPort( int port ) {
if( port < 0 || port > 65535 ) {
throw IllegalArgumentException(
__FILE__, __LINE__, "Given port value is out of range, %d", port );
}
synchronized( &mutex ) {
this->port = port;
}
}
////////////////////////////////////////////////////////////////////////////////
int DatagramPacket::getOffset() const {
int result = 0;
synchronized( &mutex ) {
result = this->offset;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setOffset( int offset ) {
synchronized( &mutex ) {
if( offset < 0 || offset > size ) {
throw IllegalArgumentException( __FILE__, __LINE__, "Offset value is invalid: %d", offset );
}
this->offset = offset;
}
}
////////////////////////////////////////////////////////////////////////////////
int DatagramPacket::getLength() const {
int result = 0;
synchronized( &mutex ) {
result = this->length;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setLength( int length ) {
synchronized( &mutex ) {
if( length < 0 || ( size - offset ) > length ) {
throw IllegalArgumentException( __FILE__, __LINE__, "Length value is invalid: %d", length );
}
this->length = length;
}
}
////////////////////////////////////////////////////////////////////////////////
unsigned char* DatagramPacket::getData() const {
unsigned char* result = 0;
synchronized( &mutex ) {
result = this->buffer;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
int DatagramPacket::getSize() const {
int result = 0;
synchronized( &mutex ) {
result = this->size;
}
return result;
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setData( unsigned char* buffer, int size ) {
if( buffer == NULL ) {
throw NullPointerException( __FILE__, __LINE__, "Provided Buffer pointer was NULL." );
}
if( size <= 0 ) {
throw IllegalArgumentException( __FILE__, __LINE__, "Size value is invalid: %d", size );
}
synchronized( &mutex ) {
this->buffer = buffer;
this->size = size;
this->length = size;
this->offset = 0;
}
}
////////////////////////////////////////////////////////////////////////////////
void DatagramPacket::setData( unsigned char* buffer, int size, int offset, int length ) {
if( buffer == NULL ) {
throw NullPointerException( __FILE__, __LINE__, "Provided Buffer pointer was NULL." );
}
if( size <= 0 ) {
throw IllegalArgumentException( __FILE__, __LINE__, "Size value is invalid: %d", size );
}
if( offset < 0 || offset > size ) {
throw IllegalArgumentException( __FILE__, __LINE__, "Offset value is invalid: %d", offset );
}
if( length < 0 || ( size - offset ) > length ) {
throw IllegalArgumentException( __FILE__, __LINE__, "Length value is invalid: %d", length );
}
synchronized( &mutex ) {
this->buffer = buffer;
this->size = size;
this->length = length;
this->offset = offset;
}
}