#!/usr/local/bin/tt

### ECHO SERVER ###
if( argc!=3 )
	dying("Usage[EchoServer(UDP)]: %s SV-IP SV-Port\n",CMD);

ip  =shift()							# (String) "127.0.0.1"|"localhost"
port=shift()							# (String) "7"        |"echo"

# サーバー用ソケットの作成
sock=udp_socket(ip,port)
if( sock==NULL )
	dying("Error: cannot make socket!!\n")

disp_sockinfo(sock)

while(TRUE){

	# 受信(デフォルトソケットを利用)
	print("%s( RXing )%s ",C_GRE,C_DEF)
	(ip,port,buf,len)=rx_udp()
	print("From[%s]: IP=%s Port=%d Message=\"%s\"(Lenght=%d)\n",lstime(time()),ip_str(ip),port,buf,len)

	disp_sockinfo(sock)

	# 送信(デフォルトソケットを利用)
	print("%s( TXing )%s ",C_GRE,C_DEF)
	ret = tx_udp(ip,port,buf,len)
	print("To  [%s]: IP=%s Port=%d Message=\"%s\"(Length=%d)\n",lstime(time()),ip_str(ip),port,buf,len)

	disp_sockinfo(sock)

}

/*--1---2---3---4---5---6---7---8---9---A---B---C---D---E---F---G---H---I---J---K---L---M---N---*/
def disp_sockinfo(sock){				# ソケットの情報表示(初回時、及び、変更時)

static lo_info=NULL
static re_info=NULL

# ソケットの情報取得
	(sv_ip,sv_sip,sv_port,sv_sport,sv_type,cl_ip,cl_sip,cl_port,cl_sport,cl_type) = sockname(sock)
	lo_temp = sprint("%s[ Server(LO) ]%s IP=%s(0x%X) Port=%s(%d) Type=%s",C_BLU,C_DEF,sv_sip,sv_ip,sv_sport,sv_port,sv_type)
	re_temp = sprint("%s[ <peer>(RE) ]%s IP=%s(0x%X) Port=%s(%d) Type=%s",C_RED,C_DEF,cl_sip,cl_ip,cl_sport,cl_port,cl_type)

# 初回時、又は、変更時に表示
	if( lo_info!=lo_temp ){ lo_info = lo_temp; print("%s\n",lo_info); }
	if( re_info!=re_temp ){ re_info = re_temp; print("%s\n",re_info); }

}
