博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IPMSG
阅读量:5236 次
发布时间:2019-06-14

本文共 11287 字,大约阅读时间需要 37 分钟。

Original ipmsg protocol specification is written in Japanese.

This document was translated by Mr.Kanazawa.
This document is not verified yet.

----------------------------------------------------------------------

        IP Messenger communication protocol (Draft-9)    1996/02/21
                                                Modified 2003/01/14

                                                       H.Shirouzu

                                              
----------------------------------------------------------------------

About IP Messenger

 This is a Send/Receive message service using the TCP/UDP Port.

Characteristics

 IP Messenger can be installed in any OS if TCP/IP is used on your machine.
 Dynamic member recognition can be done within your network or specified network.
 You can exchange messages between all IPMsg members.

Function description

 Use TCP/UDP port(default:2425). See the following descriptions
 (Message Send/Receive: UDP, File Send/Receive: TCP)

  1. Command

     1) Command functions (Low 8 bits from command number 32 bits)

 IPMSG_NOOPERATION No Operation

 IPMSG_BR_ENTRY  Entry to service (Start-up with a Broadcast command)
 IPMSG_BR_EXIT  Exit from service (End with a Broadcast command)
 IPMSG_ANSENTRY  Notify a new entry
 IPMSG_BR_ABSENCE Change absence mode

 IPMSG_BR_ISGETLIST Search valid sending host members

 IPMSG_OKGETLIST  Host list sending notice
 IPMSG_GETLIST  Host list sending request
 IPMSG_ANSLIST  Host list sending

 IPMSG_SENDMSG  Message transmission

 IPMSG_RECVMSG  Message receiving check

 IPMSG_READMSG  Message open notice

 IPMSG_DELMSG  Message discarded notice
 IPMSG_ANSREADMSG Message open confirmation notice(added from version-8)

 IPMSG_GETFILEDATA File Transfer request by TCP

 IPMSG_RELEASEFILES Discard attachment file
 IPMSG_GETDIRFILES Attachment hierarchical file request

 IPMSG_GETINFO  Get IPMSG version info.

 IPMSG_SENDINFO  Send IPMSG version info.

 IPMSG_GETABSENCEINFO Get absence sentence

 IPMSG_SENDABSENCEINFO Send absence sentence

 IPMSG_GETPUBKEY  RSA Public Key Acquisition

 IPMSG_ANSPUBKEY  RSA Public Key Response

     2) Option flag (High 24 bits from command number 32 bits)

 IPMSG_ABSENCEOPT Absence mode(Member recognition command)

 IPMSG_SERVEROPT  Server(Reserved)
 IPMSG_DIALUPOPT  Send individual member recognition command

 IPMSG_SENDCHECKOPT Transmission check

 IPMSG_SECRETOPT  Sealed message
 IPMSG_READCHECKOPT Sealed message check(added from ver8)
 IPMSG_PASSWORDOPT Lock
 IPMSG_BROADCASTOPT Broadcast message
 IPMSG_MULTICASTOPT Multi-cast(Multiple casts selection)
 IPMSG_NEWMUTIOPT New version multi-cast(reserved)
 IPMSG_AUTORETOPT Automatic response(Ping-pong protection)
 IPMSG_NOLOGOPT  No log files
 IPMSG_NOADDLISTOPT Notice to the members outside of BR_ENTRY

 IPMSG_FILEATTACHOPT File attachment

 IPMSG_ENCRYPTOPT Code

 IPMSG_NOPOPUPOPT (No longer valid)

 IPMSG_RETRYOPT  Re-send flag(Use when acquiring HOSTLIST)

     3) Extended code flag (hex format combination)

 IPMSG_RSA_512

 IPMSG_RSA_1024
 IPMSG_RSA_2048
 IPMSG_RC2_40
 IPMSG_RC2_128
 IPMSG_RC2_256
 IPMSG_BLOWFISH_128
 IPMSG_BLOWFISH_256
 IPMSG_SIGN_MD5

     4) Extended files for attachment (fileattr low 8 bits)

 IPMSG_FILE_REGULAR

 IPMSG_FILE_DIR
 IPMSG_FILE_RETPARENT
 IPMSG_FILE_SYMLINK
 IPMSG_FILE_CDEV
 IPMSG_FILE_BDEV
 IPMSG_FILE_FIFO
 IPMSG_FILE_RESFORK

     5) Attachment file extended attribute(fileattr high 24 bits)

 IPMSG_FILE_RONLYOPT

 IPMSG_FILE_HIDDENOPT
 IPMSG_FILE_EXHIDDENOPT
 IPMSG_FILE_ARCHIVEOPT
 IPMSG_FILE_SYSTEMOPT

     6) Extended file attribute for attachment file

 IPMSG_FILE_UID

 IPMSG_FILE_USERNAME
 IPMSG_FILE_GID
 IPMSG_FILE_GROUPNAME
 IPMSG_FILE_PERM
 IPMSG_FILE_MAJORNO
 IPMSG_FILE_MINORNO
 IPMSG_FILE_CTIME
 IPMSG_FILE_MTIME
 IPMSG_FILE_ATIME
 IPMSG_FILE_CREATETIME

 IPMSG_FILE_CREATOR

 IPMSG_FILE_FILETYPE
 IPMSG_FILE_FINDERINFO

 IPMSG_FILE_ACL

 IPMSG_FILE_ALIASFNAME
 IPMSG_FILE_UNICODEFNAME

  2.Command format(Use all character strings)

     1) Command(Format version-1)

 Ver(1) : PacketNo : SenderName : SenderHost : CommandNo : AdditionalSection

     2) An example for Message Send/Receive by using the current command format

 "1:100:shirouzu:jupiter:32:Hello"

  3.Command process overview

     1) Member recognition

 An IPMSG_BR_ENTRY command notifies a new entry to the current

 members at start-up.

 All members add the new member to their list after getting a notification message.

 An IPMSG_ANSENTRY command sends a message back to the new member.

 The new member gets the current member data by a

 IPMSG_ANSENTRY command. All members can communicate as long as an
 IP packet exists.

 An IPMSG_BR_ABSENCE command broadcasts absence mode cancel or

 nickname change to all members. However, an IPMSG_ANSENTRY command
 does not send a message back, which is different from an IPMSG_BR_ENTRY
 command.

 IPMSG_BR_ENTRY, IPMSG_ANSENTRY, and IPMSG_BR_ABSENCE commands

 use an IPMSG_ABSENCEOPT flag for absence mode. Input a nickname to
 additional command.
 Add an IPMSG_DIALUPOPT flag for dial-up users who can't be reached by
 a broadcast command.  A member recognition command needs to be
 sent individually to the members with this optional flag.

 (Extended group)IPMSG_BR_ENTRY and IPMSG_BR_ABSENCE commands

 sends a group name by adding the new group name after the current
 command format character strings (Input '\0' between the current
 command and extended name).

     2) Send/Receive Message

 Send Message uses an IPMSG_SENDMSG command that can input a message
 in the extended area.
 Receive Message sends back an IPMSG_RECVMSG command only
 if an IPMSG_SENDCHECKOPT flag is ON. Input the original packet number
 to the extended area.

 Broadcast Message Send uses an IPMSG_BOADCASTOPT command

 and an IPMSG_SENDMSG flag should be ON.
 Auto-Send packet(absence notice) needs to be added to IPMSG_AUTORETOPT
 for ping-pong protection. If either one or another packet is ON, then
 confirmation/auto-send packet is not sent back.

 Send Message Sealing needs to be an IPMSG_SECRETOPT packet ON.

 In this case, Receive Message sends an IPMSG_READMSG command.
 Input the original packet number to the extended area.

 (Additional IPMSG_NOADDLISTOPT)

 When receiving an IPMSG_SENDMSG packet from a host that is
 not on your Send/Receive list, IPMsg will either confirm a host by
 sending an IPMSG_BR_ENTRY command or add a host name to
 the Send/Receive list.
 However, single-shot Message Send/Receive action needs to be avoided.
 Add an IPMSG_NOADDLISTOPT flag to an IPMSG_SENDMSG command.

 (Additional IPMSG_READCHECKOPT from version-8)

 When an IPMSG_READMSG command contains an IPMSG_READCHECKOPT flag,
 IPMsg process is the same as IPMSG_SENDMSG with an
 IPMSG_SENDCHECKOPT flag.
 However, Send Message uses an IPMSG_ANSREADMSG command, 
 not IPMSG_RECVMSG.

     3) Message Send/Receive 亅encrypted extension (Added in the version-9)

 Use the combination of Public-key(RSA) and common key(RC2/Blowfish).

 (Encrypted extension area is used in hex format.)

 (Public key acquisition)Send an IPMSG_GETPUBKEY command to Receive

 Message. Receive Message gets an IPMSG_ANSPUBKEY that
 means receiving RSA public key from Send Message.

 IPMSG_GETPUBKEY/IPMSG_ANSPUBKEY both require the value which is

 encryption capability (Exp. IPMSG_RSA_1024) flag uses "OR" at first
 part of extension 

 In addition, In IPMSG_ANSPUBKEY, public key written as EE-NNNNNN

 E=Exponent丄N=method)devide by ':'. and Input the Fdelimiter '-'
 between E and N.

 This sequence can be skipped after the 2nd Send/Receive process by

 memorizing public key and encrypted data.
 
 (Encrypted message)After a sender creates a common key that is
 supported both sender and receiver, a common key can encrypt a message.
 In addition, a receiver's public key encrypts the common key.

 (Encrypted message transmission) IPMSG_ENCRYPTOPT is used in
 IPMSG_SENDMSG. At the first part of extension, input the value which
 is 'or' resoult from Convination of public key and common key type .
 Then use common key which encrypt with public key devide by ':'.
 Then input message which is eccrypted by public key devide by ':'.
 If both supports IPMSG_SIGN_XXX, then add ':' and signeture.

 Also, In the method of encode padding, PKCS#1ECB key is used for RSA,

 PKCS#5 CBC common key is used for RC2/blowfish.

 Also, The Packet related to Entry manifestation the capability of

 ecryption support using  IPMSG_ENCRYPTOPT

     4) Extension with file attachment(Available from version-9)

 An IPMSG_SENDMSG command with an IPMSG_FILEATTACHOPT flag for

 File transfer (download permission)notification sends a message
 with attachment.
 Input '\0' after the message and attachment file data.
 

 fileID:filename:size:mtime:fileattr[:extend-attr=val1

 [,val2...][:extend-attr2=...]]:\a:fileID...
 (size, mtime, and fileattr describe hex format.
  If a filename contains ':', please replace with "::".)

 When Receive Message downloads an attachment file, an IPMSG_GETFILEDATA

 command requests a data transmission packet to the TCP port that is the same number 
 as the UDP sending port number. Input packetID:fileID:offset to the extended area.
 (Use all hex format.)
 File Transfer side receives the request. After recognizing that it's a correct request,
 then send the specified data (no format)

 When the data receiving side downloads a hierarchical attachment file,

 use an IPMSG_GETDIRFILES command and input a packetID:fileID
 to the extended area and send a data transmission request packet.
 (all hex format)

 Data sending side sends the following hierarchical data format.

 header-size:filename:file-size:fileattr[:extend-attr=val1
 [,val2...][:extend-attr2=...]]:contents-data
 Next headersize: Next filename...
 (All hex format except for filename and contetns-data)

 header-size is from the beginning of header-size to the delimiter ':'

 that is before contents-data. extend-attr can be omitted and used multiple
 extended attributes. Use '=' for data input.

 When fileattr is IPMSG_FILE_DIR, IPMsg recognizes that it is automatically

 in the directory, the next file data is after the directory.

 When fileattr is IPMSG_FILE_RETPARENT, IMPsg recognizes that it returns

 to the parent directory. In this case, File name is always "." and the attribute
 value is the current directory data.

 Sending process starts from the attachment directly and returns the

 IPMSG_FILE_RETPARENT command to the attachment directory.

 Add an IPMSG_FILEATTACHOPT flag for an Entry packet to support the

 attachment file.

     5) Other commands

 When acquiring different versions, send an IPMSG_GETINFO command.

 Receiving side sends the version information character string to
 extended area.

 Send an IPMSG_GETABSENCEINFO command for acquiring an absence message.

 Receiving side sends an IPMSG_SENDABSENCEINFO back if the status is absence mode.
 If the status is not absence mode, a character string "Not absence mode" will be sent back.

     6) Confirmation/Retry

 If a confirmation packet for IPMSG_SENDMSG or IPMSG_RECVMSG is not delivered

 within a specified time, then it will be sent again.
 A number of retry actions or interval period is depended on the current condition.

  4. Other

     1) Linefeed

 Linefeed characters in Send Message is standardized with UNIX type ('0x0a').

 Please change if needed.

     2) Delimiter ':'

 ':' is used as a delimiter. You can't use this delimiter for user name

 and host name.
 If the use/host names contain a ':', please replace with another sign,
 for an example ';'.
 Although using this delimiter isn't problem as yet, I may create an
 escape sequence.
 

     3) Kanji codes

 SJIS

  5. Contact e-mail address

 E-Mail

Note
 See ipmsg.h for command codes.
 Please e-mail me your comments and suggestions.

转载于:https://www.cnblogs.com/hnrainll/archive/2011/05/07/2039566.html

你可能感兴趣的文章
django ORM创建数据库方法
查看>>
php7 新特性整理
查看>>
RabbitMQ、Redis、Memcache、SQLAlchemy
查看>>
知识不是来炫耀的,而是来分享的-----现在的人们却…似乎开始变味了…
查看>>
口胡:[HNOI2011]数学作业
查看>>
数据库锁机制及乐观锁,悲观锁的并发控制
查看>>
03 线程池
查看>>
手机验证码执行流程
查看>>
设计模式课程 设计模式精讲 2-2 UML类图讲解
查看>>
Silverlight 的菜单控件。(不是 Toolkit的)
查看>>
初识lua
查看>>
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
jquery的contains方法
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>