分享
 
 
 

RFC120 - Network PL1 subprograms

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

NETWORK PL1 SUBPROGRAMS

April 21, 1971

Mark Krilanovich

Computer Research Lab

University of California

Santa Barbara, California

PREFACE

The subroutines described in this document have been implemented at UCSB

and make the Network (via the NCP) Accessible to PL1 programs executing

in the 360/75. They are callable from within any PL1 main program or

subroutine compiled at UCSB.

A set of assembly-language written subprograms is provided to

facilitate the use of the Network by PL1 programmers. They serve as

an interface between the user and the Network Control Program (NCP),

which supervises all Network operations at this site.

A concept fundamental to PL1 Network operations is that of a

completion code variable. Associated with each socket that is not in

the closed state is a unique variable, called a completion code

variable. This variable serves two purposes: it identifies the

local socket referenced, and upon completion of the operation it

contains a completion code to indicate the outcome of the operation

to the programmer. It may be used at any time for any purpose other

than Network operations. Its value at the beginning of a Network

operation is immaterial; rather, it is the variable itself that is

important. In all Network operations, whenever a completion code

variable is called for, the only acceptable attributes for the

variable are BINARY FIXED(31,0)ALIGNED.

In general, the subprograms will initiate the operation, and enter

the WAIT state (consume no CPU time) until notified by the NCP of the

completion of the operation. For such operations, the programmer

supplies a time limit, with attributes BINARY FIXED(31,0), which

specifies, in tenths of a second, the maximum length of time the

subprogram is to wait for the operation to complete. If this time

limit is exceeded, a completion code is supplied to indicate the

error, and control is returned to the calling program, with the

operation still pending.

In those operations requiring a socket to be specified by its socket

identifier, the following format is used. The identifier is

specified as a BINARY FIXED(31,0) array, singly dimensioned with at

least two elements, and with a lower subscript bound of one. The

first element is taken to be the site number, and the second element

the socket number. A socket number may have any value, positive,

negative, or zero. Since negative numbers are represented internally

in two's complement form, for the purposes of the gender of a socket,

a socket number is even or odd according to whether its absolute

value is even or odd, respectively.

Following is a description of each subprogram, its function and

calling sequence.

(1) OPEN

By invoking this subprogram, the user requests that the specified

local socket be removed from the closed state and thus be prepared

to participate in data transfer. There are three distinct

operations that can be performed by this subprogram, and these are

described below:

(A) CONNECT

By initiating this operation, the user requests that the

specified local socket be logically connected to the specified

foreign socket, and that data transfer between the two sockets

be enabled. The subprogram will wait until the foreign socket

either accepts or rejects the connection attempt. This

operation is valid only when the socket is in the closed

state.

The calling sequence is as follows:

CALL @OPEN(cmpcd, time,lclsck,fgnsck,ws);

where

'cmpcd' is the completion code variable to be associated

with the local socket.

'time' is the length of time the subprogram is to wait

for the completion of the operation.

'lclsck' is the socket identifier of the local socket.

'fgnsck' is the socket identifier of the foreign socket.

'ws' is a workspace which has the same attributes as a

socket identifier, and, if the operation if

successful, will become associated with the local

socket for the life of the connection. In response

to certain future operations, information may be

returned to the programmer in this workspace.

The following completion codes are possible for this

operation:

0, The operation was successful and the connection has

been established

4, The specified completion code variable is already

assigned to a socket; the operation was suppressed

8, The specified local socket is not in the closed

state; the operation was suppressed

12, All communication paths to the specified foreign site

are in use; the operation was suppressed

16, Local resources are insufficient to support another

connection; the operation was suppressed

20, The connection attempt was rejected by the foreign

process

24, The specified local socket is not local to UCSB; the

operation was suppressed

28, The specified foreign site is invalid; the operation

was suppressed

32, An addressing or protection exception was encountered

with respect to the specified workspace; the

operation was suppressed

36, Either hardware at the foreign site is inoperative or

the NCP's counterpart at the foreign site does not

exist or has failed

40, Local and foreign sockets are both either send or

receive sockets; the operation was suppressed

44, By operator command, all Network operations were

terminated; the socket will be closed

60, An NCP control transmission error occured; the

operation was suppressed

252, The specified time limit was exceeded; the operation

was initiated but not completed

(B) LISTEN

This operation is a request for notification of any connection

attempt directed toward the specified local socket. The

subprogram waits until such a call is received, at which time

the calling process' socket identifier is returned to the

calling program. This operation is valid only when the

designated local socket is in the closed state. The calling

sequence is as follows:

CALL @OPEN(cmpcd, time,lclsck,ws);

where

'cmpcd' is the completion code variable to be associated

with the local socket.

'time' is the length of time the subprogram is to wait

for the completion of the operation.

'lclsck' is the socket identifier of the local socket.

'ws' is a workspace which, if the operation is

successful, will contain the socket identifier of

the calling socket, and will become associated with

the local socket for the life of the connection.

'ws' has the same attributes as a socket identifier.

The following completion codes are possible for this

operation:

0, The operation was successful and a call has been

received

4, The specified completion code variable is already

assigned to a socket; the operation was suppressed

8, The specified local socket is not in the closed

state; the operation was suppressed

12, Local resources are insufficient to support another

connection; the operation was suppressed

16, The specified local socket is not local to UCSB; the

operation was suppressed

20, An addressing or protection exception was encountered

with respect to the specified workspace; the

operation was suppressed

44, By operator command, all Network operations were

terminated; the socket will be closed

252, The specified time limit was exceeded; the operation

was initiated but not completed

(C) ACCEPT

This operation accepts connection with the foreign socket

whose call caused successful completion of a previous LISTEN

operation by the specified local socket. After completion of

this operation, data may be transferred to or from the local

socket, depending on its gender. This operation is valid only

when the last operation referencing the local socket was a

LISTEN operation. The subprogram will wait until the

operation is completed.

The calling sequence is as follows:

CALL @OPEN(cmpcd, time);

where

'cmpcd' is the completion code variable associated with

the local socket by a previous LISTEN operation.

'time' is the length of time the subprogram is to wait

for the completion of the operation.

The following completion codes are possible for this

operation:

0, The operation was successful, and the connection is

established

4, The specified local socket is in the closed state

(the NCP may have received an abort notification from

the foreign process); the operation was suppressed

8, The previous operation specifying the designated

local socket was not a LISTEN; the operation was

suppressed

12, All communication paths to the specified foreign site

are in use; the socket has been returned to the

closed state

252, The specified time limit was exceeded; the operation

was initiated but not completed

(2) CLOSE

This operation is a request that the specified local socket be

returned to the closed state. If the last operation involving this

socket was a LISTEN, this operation refuses the foreign process'

connection attempt. If the last operation was a CONNECT, the

attempt is aborted. If a connection is established, any data in

transit from the local socket is allowed to reach the foreign

socket and to be either received or flushed before the local socket

is closed. The subprogram will wait until the socket has been

returned to the closed state.

The calling sequence is as follows:

CALL @CLOSE(cmpcd,time);

where

'cmpcd' is the completion code variable associated with the

local socket.

'time' is the length of time the subprogram is to wait for the

completion of the operation.

The following completion codes are possible for this operation:

0, The operation was successful, and the socket has been

returned to the closed state

8, The specified completion code variable is not currently

assigned to a socket; the operation was suppressed

12, The specified local socket is in the process of being

closed; the operation was suppressed, but the local

socket will be closed

36, Either hardware at the foreign site is inoperative, or the

NCP's counterpart at the foreign site does not exist or

has failed

44, By operator command, all Network operations were

terminated; the socket will be closed

60, An NCP control transmission error occured; the operation

was aborted

64, A transmission error occured; the operation was aborted,

but the socket will be closed

252, The specified time limit was exceeded; the operation was

initiated but not completed

(3) SEND

This operation causes data to be sent to the foreign socket. The

subprogram will wait until the data has been received by the

foreign socket, or until it has been queued locally by the NCP.

The calling sequence is as follows:

CALL @WRITE(cmpcd, bfr,len,time[,offset]);

where

'cmpcd' is the completion code variable associated with the

local socket.

'bfr' is the data to be sent, and must be a singly dimensioned

array, either DECIMAL or BINARY, FIXED or FLOAT.

'len' is the number of bits of data to be sent. If 'len' is

non-positive, no operation is performed. 'len' has the

attribute BINARY FIXED(31,0).

'time' is the length of time the subprogram is to wait for the

completion of the operation.

'offset' is the bit offset from the first bit of 'bfr' at

which data transmission is to begin, and must have the

attributes BINARY FIXED(31,0). If not specified,

'offset' defaults to zero.

The following completion codes are possible for this operation:

0, The operation was successful, and the data has been sent

4, The specified local socket is not a SEND socket; the

operation was suppressed

8, The specified completion code variable is not assigned to

a socket; the operation was suppressed

12, A previous SEND operation is in progress; the operation

was suppressed

16, The connection is not fully open; the operation was

suppressed

20, The foreign socket terminated the connection before

completion of the SEND operation; not all data was

transmitted

36, Either hardware at the foreign site is inoperative, or the

NCP's counterpart at the foreign site does not exist or

has failed

44, By operator command, all Network operations were

terminated; the socket will be closed

52, One or more interrupts were received from the foreign

socket; the operation was suppressed

56, An addressing exception was encountered with respect to

the data buffer; the operation was suppressed

60, An NCP control transmission error occured; the operation

was suppressed

64, A transmission error occured; the operation was aborted,

and the socket will be closed

252, The specified time limit was exceeded; the operation was

initiated but not completed

(4) RECEIVE

This operation causes data to be received from the foreign socket.

The subprogram will wait until the reception of data is complete.

The calling sequence is as follows:

CALL @READ(cmpcd,bfr,len,time[,offset]);

where

'cmpcd' is the completion code variable associated with the

local socket.

'bfr' is the variable into which the data is to be placed, and

must be a singly dimensioned array, DECIMAL or BINARY,

FIXED or FLOAT.

'len' is the number of bits of data to be received. If 'len'

is non-positive, no operation is performed. 'len' has

the attribute BINARY FIXED(31,0).

'time' is the length of time the subprogram is to wait for the

completion of the operation.

'offset' is the bit offset from the first bit of 'bfr' at

which the first bit of data is to be placed, and must

have the attributes BINARY FIXED(31,0). If not

specified, 'offset' defaults to zero.

The following completion codes are possible for this operation:

0, The operation was successful and the data has been

received

4, The specified local socket is not a receive socket; the

operation was suppressed

8, The specified completion code variable is not assigned to

a socket; the operation was suppressed

12, A previous RECEIVE operation is in progress; the

operation was suppressed

16, The connection is not fully open; the operation was

suppressed

20, The foreign socket terminated the connection before

completion of the RECEIVE operation; data is

unpredictable

36, Either hardware at the foreign site is inoperative, or the

NCP's counterpart at the foreign site does not exist or

has failed

44, By operator command, all Network operations were

terminated; the socket will be closed

24, An addressing or protection exception was encountered with

respect to the data buffer; the operation was suppressed

52, One or more interrupts were received from the foreign

socket; the operation was suppressed

60, An NCP control transmission error occured; the operation

was aborted, and the socket will be closed

252, The specified time limit was exceeded; the operation was

initiated but not completed

(5) CHECK

This operation causes the status of the specified local socket to

be returned. There is no completion code variable associated with

this operation, since it is always successful and the socket is

identified by its socket number. This operation is valid at any

time and is always completed immediately.

The calling sequence is as follows:

CALL @CHECK(lclsck,stat,mnem,fgnsck,deficit);

where

'lclsck' is the socket identifier of the local socket.

'stat' is a code for the status, and has the attribute BINARY

FIXED(31,0).

'mnem' is a mnemonic for the status, and has the attribute

CHARACTER, of any fixed length greater than or equal to

eight. If 'mnem' is longer than eight bytes, it will be

padded to the right with blanks.

'fgnsck' is the socket identifier of the foreign socket, or

zero.

'deficit' is the send/receive deficit in bits, or zero, and

has the attributes BINARY FIXED(31,0).

'lclsck' is the only argument the programmer need define;

the others are output from the subprogram.

Following are the possible status codes, together with their

mnemonics and interpretations.

'STAT' 'MNEM' MEANING

---- ----

0 OPEN A connection is fully established. No

SEND/RECEIVE operation is in progress.

'fgnsck' is the socket identifier of the

connected socket. 'deficit' is the number

of bits queued locally at the socket by the

NCP and available to satisfy a future

RECEIVE operation, or awaiting output as

the result of a previous SEND operation.

1 LISTEN A LISTEN has been issued.

2 CONNECT A CONNECT has been issued. 'fgnsck' is the

socket identifier of the foreign socket.

3 DECISION A LISTEN has been completed. 'fgnsck' is

the socket identifier of the calling

socket.

4 CALL(S) One or more calls have been received for

the local socket. No LISTEN or CONNECT has

been issued.

5 I/O A connection is fully established. A

SEND/RECEIVE operation is in progress.

'fgnsck' is the socket identifier of the

connected socket. 'deficit' is the number

of bits yet to be sent or received.

6 CLOSED The socket is in the closed state.

7 <--DRAIN The foreign socket is attempting to close

the connection. The NCP has data yet to be

read by the local socket. 'fgnsck' is the

socket identifier of the connected socket.

'deficit' is the number of bits yet to be

received.

8 DRAINED The foreign socket is attempting to close

the connection. The NCP is awaiting

arrival at the foreign site of data

currently in transit. 'fgnsck' is the

socket identifier of the connected socket.

9 CLOSING The local socket has issued a CLOSE. The

NCP is in the process of returning the

local socket to the closed state. 'fgnsck'

is the socket identifier of the connected

socket.

10 DRAIN--> The local socket has issued a CLOSE. The

NCP is completing the last SEND operation

before returning the local socket to the

closed state. 'fgnsck' is the socket

identifier of the connected socket.

'deficit' is the number of bits the NCP has

yet to transmit.

(6) IDENTIFY

This operation is used to identify a local socket by its completion

code variable. The operation is valid at any time, and is always

completed immediately. Since it is always successful, there are no

completion codes for the operation, and the contents of the

completion code variable are not changed.

The calling sequence is as follows:

CALL @ID(cmpcd,lclsck);

where

'cmpcd' is the completion code variable to be associated with

the local socket

'lclsck' is set to the socket identifier of the local socket

if the completion code variable is associated with a

socket, or to zero otherwise.

(7) SIGNAL

This operation is used to convey a signal to the foreign process.

The significance of the signal is completely user-dependent. The

effect is that the next time the foreign socket attempts to

initiate a RECEIVE or SEND operation, the operation will be

suppressed, and a completion code supplied indicating that a signal

had been received. The subprogram will wait until the signal has

been sent to the foreign NCP. This operation is valid only when

the socket is fully open.

The calling sequence is as follows:

CALL @ID(cmpcd,time);

where

'cmpcd' is the completion code variable associated with the

local socket.

'time' is the length of time the subprogram is to wait for

completion of the operation.

The following completion codes are possible for this operation:

0, The operation was successful, and the signal has been sent

4, The specified completion code variable is not assigned to

a socket; the operation was suppressed

8, The connection is not fully open; the operation was

suppressed

Certain of the Network subprograms are intended for, although not

restricted to, use with the On-Line System Network operators. The

following is a general description of these operators:

In all Network operations involving the On-Line System Network

operators, there are certain conventions concerning the format of the

data sent and received. The data is grouped in 'messages' consisting

of three fields, op code, length, and text, in that order. The op

code is one byte in length and is a code which indicates how the text

field is to be interpreted. The length field is two bytes long, and

gives the length, in bits, of the text field, which contains the

actual data. (The op code and length fields together are termed a

header.)

The following op codes are presently defined:

op code meaning

0 The op code is a NOP. No text field exists, and the

contents of the length field are unpredictable. (This op

code is used mainly as a delimiter.)

1 The text field contains EBCDIC characters, one character

per byte. The On-Line System Network operators consider

the characters as intended for display as soon as the

text field has been received.

2 The text contains codes for keypushes, one byte per key.

The On-Line operators consider the text as intended for

execution as soon as the text field has been received.

3 The same as for an op code of 2, except that the On-Line

operators consider that the execution of the keys will be

delayed until all data for that receive operation has

been received.

The standard format of data sent or received by the On-Line System

operators is a string of messages, with the last message indicated by

a header with a NOP op code, called a trailer. These conventions are

the default situation; any of them may be overridden by appropriate

programming.

Following are descriptions of those subprograms intended for use with

the On-Line System operators.

(8) WRITE TO ON-LINE CONSOLE

This subprogram causes data, assumed to be characters represented

by their EBCDIC codes, to be sent from the specified local socket.

The characters are sent in a standard message, preceded by a

header, and optionally followed by a trailer. The subprogram waits

for the data to be received by the foreign socket, or to be queued

locally by the NCP. This operation is valid only when the local

socket is a send socket, and is fully open.

The calling sequence is as follows:

CALL @WTOLC(cmpcd,bfr,len,level,across,down,time);

where

'cmpcd' is the completion code variable associated with the

local socket.

'bfr' is the character string to be sent, and must have the

attribute STRING, either CHARACTER or BIT, of any length,

fixed or varying.

'len', in absolute value, is the number of characters to be

sent. If 'len' is positive or zero, the end of the data

is indicated by a trailer; if 'len' is negative, no

trailer is sent. 'len' has the attributes BINARY

FIXED(31,0).

'level' indicates the mode of typing. The absolute value of

'level', if non-zero, is the shift level on which to

type, and must be less than or equal to nine. If greater

than nine, one is used. If 'level' is positive, 'across'

and down are relative to the current typing location. If

'level' is negative, the carriage is positioned to the

upper left-hand corner before typing begins, thus making

'across' and 'down' absolute coordinates. If 'level' is

zero, the typing is in case one characters, and a

carriage return precedes the positioning for 'across' and

'down'. If the characters to be displayed are case one

characters, the header sent will have an op code which

indicates characters to be displayed as soon as they are

received; otherwise, the op code will indicate buttons

to be executed as soon as received. 'level' has the

attributes BINARY FIXED(31,0).

'across' is the number of spaces to be moved horizontally

across the display tube before beginning to type.

'across' can have any value, positive, negative, or zero,

and has the attributes BINARY FIXED(31,0).

'down' is the number of lines to be moved vertically down the

display tube before beginning to type. 'down' can have

any value, positive, negative, or zero, and has the

attributes BINARY FIXED(31,0).

'time' is the length of time the subprogram is to wait for the

completion of the operation.

The completion codes for this operation are the same as for SEND.

(9) READ FROM ON-LINE CONSOLE

This subprogram receives data, assumed to be characters represented

by their EBCDIC codes, from the foreign socket in one or more

standard messages. The subprogram will wait for the data,

optionally followed by a trailer, to be received by the local

socket. This operation is valid only when the local socket is a

receive socket and is fully open.

The calling sequence is as follows:

CALL @RFOLC(cmpcd,bfr,len,time);

where

'cmpcd' is the completion code variable associated with the

local socket.

'bfr' is the variable into which the data is to be placed, and

has the attribute CHARACTER, of any fixed length. If the

length of 'bfr' is greater than the amount of data

received, 'bfr' will be padded to the right with blanks.

'len', in absolute value, is the maximum number of characters

to be placed in 'bfr'. If the length fields of the

header(s) received total more data than 'len', the excess

data will be received, but will not be placed into 'bfr',

and will not be accessible to the program. If 'len' is

positive or zero, data will be received until a trailer

is encountered. If 'len' is negative, a single message,

exclusive of trailer, will be received. 'len' has the

attributes BINARY FIXED(31,0).

'time' is the length of time the subprogram is to wait for the

completion of the operation.

The completion codes for this operation are the same as for

RECEIVE.

(10) WRITE TO ON-LINE CONSOLE WITH REPLY

This subprogram combines the functions of 'WRITE TO ON-LINE

CONSOLE' and 'READ FROM ON-LINE CONSOLE'. The subprogram first

sends a string of data to the foreign socket from the specified

send socket, waits for it to be received by the foreign socket (or

queued locally by the NCP), and then waits for a reply directed

toward the specified receive socket. The operation is valid only

when the sockets have the correct gender and both are fully open.

The calling sequence is as follows:

CALL @WTOLCR(cmpcd, bfr, len, level, across, down, time,

cmpcd2, bfr2, len2);

where

'cmpcd' is the completion code variable associated with the

local send socket.

'bfr' is as in 'WRITE TO ON-LINE CONSOLE'.

'len' is as in 'WRITE TO ON-LINE CONSOLE'.

'level' is as in 'WRITE TO ON-LINE CONSOLE'.

'across' is as in 'WRITE TO ON-LINE CONSOLE'.

'down' is as in 'WRITE TO ON-LINE CONSOLE'.

'time' is the length of time the subprogram is to wait for

completion, individually, of the transmission and

reception of data.

'cmpcd2' is the completion code variable associated with the

local receive socket.

'bfr2' is as 'bfr' in 'READ FROM ON-LINE CONSOLE'.

'len2' is as 'len' in 'READ FROM ON-LINE CONSOLE'.

The completion codes for the send socket are the same as for the

SEND operation, and the completion codes for the receive socket are

the same as for the RECEIVE operation.

(11) ERASE

This subprogram causes data constituting an On-Line System command

to erase the display tube to be sent from the specified local

socket. The data is sent in a single standard message, including

an op code indicating characters to be displayed as they are

received, and optionally including a trailer. The subprogram

waits for the data to be received by the foreign socket, or to be

queued locally by the NCP. This operation is valid only when the

local socket is a send socket, and is fully open.

The calling sequence is as follows:

CALL @ERASE(cmpcd,delay1,delay2,time);

where

'cmpcd' is the completion code variable associated with the

local socket.

'delay1', in absolute value, is the length of time, in tenths

of a second, the subprogram is to pause (in the WAIT

state) before sending the erase. If 'delay1' is

positive or zero, a trailer will be sent after the

erase; if negative, no trailer will be sent. 'delay1'

has the attributes BINARY FIXED(31,0).

'delay2', is the length of time, in tenths of a second, the

subprogram is to pause after sending the erase and

before returning control to the calling program, and has

the attributes BINARY FIXED(31,0).

'time' is the length of time the subprogram is to wait for

the completion of the operation.

The completion codes for this operation are the same as for SEND.

[ This RFCwas put into machine readable form for entry ]

[ into the online RFCarchives by Rune Skaarsmoen 6/97 ]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有