module CTI::CTIP2
- Version
-
$Id: CTIP2.rb 902 2013-04-23 05:07:04Z miyabe $
通信プロトコルに関連する各操作です。
このモジュールに所属するメソッドは、 IO に対するものです。
end¶ ↑
Constants
- CTI_BUFFER_SIZE
パケットの送信に使うバッファのサイズです。
end¶ ↑
- FRG_MEM_SIZE
メモリ上のフラグメントの最大サイズです。
フラグメントがこの大きさを超えるとディスクに書き込みます。
end¶ ↑
- ON_MEMORY
メモリ上に置かれるデータの最大サイズです。
メモリ上のデータがこのサイズを超えると、
FRG_MEM_SIZE
とは無関係にディスクに書き込まれます。end¶ ↑
- REQ_ABORT
- REQ_CLIENT_RESOURCE
- REQ_CLOSE
- REQ_CONTINUOUS
- REQ_DATA
- REQ_EOF
- REQ_JOIN
- REQ_MISSING_RESOURCE
- REQ_PROPERTY
- REQ_RESET
- REQ_SERVER_INFO
- REQ_SERVER_MAIN
- REQ_START_MAIN
- REQ_START_RESOURCE
- RES_ABORT
- RES_ADD_BLOCK
- RES_BLOCK_DATA
- RES_CLOSE_BLOCK
- RES_DATA
- RES_EOF
- RES_INSERT_BLOCK
- RES_MAIN_LENGTH
- RES_MAIN_READ
- RES_MESSAGE
- RES_NEXT
- RES_RESOURCE_REQUEST
- RES_START_DATA
- SEGMENT_SIZE
一時ファイルのセグメントサイズです。
end¶ ↑
Public Instance Methods
cti_connect(encoding)
click to toggle source
read_byte()
click to toggle source
read_bytes()
click to toggle source
read_int()
click to toggle source
read_long()
click to toggle source
64ビットビッグインディアン数値を読み込みます。
- 戻り値
-
数値、エラーであればfalse
end¶ ↑
# File CTI/CTIP2/Utils.rb 77 def read_long 78 b = self.read(8) 79 a = b.unpack('NN') 80 h = a[0] 81 l = a[1] 82 if h >> 31 != 0 then 83 h ^= 0xFFFFFFFF 84 l ^= 0xFFFFFFFF 85 b = (h << 32) | l 86 b = -(b + 1) 87 else 88 b = (h << 32) | l 89 end 90 return b; 91 end
read_short()
click to toggle source
req_abort(mode)
click to toggle source
req_client_resource(mode)
click to toggle source
req_close()
click to toggle source
req_continuous(mode)
click to toggle source
req_eof()
click to toggle source
req_join()
click to toggle source
req_missing_resource(uri)
click to toggle source
req_property(name, value)
click to toggle source
req_reset()
click to toggle source
req_resource(uri, mime_type = 'text/css', encoding = '', length = -1)
click to toggle source
リソースの開始を通知します。
- uri
-
URI
- mime_type
-
MIME型
- encoding
-
エンコーディング
- length
-
長さ
end¶ ↑
# File CTI/CTIP2/CTIP2.rb 217 def req_resource(uri, mime_type = 'text/css', encoding = '', length = -1) 218 payload = uri.bytesize + mime_type.bytesize + encoding.bytesize + 7 + 8 219 self.write_int(payload) 220 self.write_byte(CTIP2::REQ_START_RESOURCE) 221 self.write_bytes(uri) 222 self.write_bytes(mime_type) 223 self.write_bytes(encoding) 224 self.write_long(length) 225 self.flush 226 end
req_server_info(uri)
click to toggle source
req_server_main(uri)
click to toggle source
req_start_main(uri, mime_type = 'text/html', encoding = '', length = -1)
click to toggle source
本体の開始を通知します。
- uri
-
URI
- mime_type
-
MIME型
- encoding
-
エンコーディング
- length
-
長さ
end¶ ↑
# File CTI/CTIP2/CTIP2.rb 237 def req_start_main(uri, mime_type = 'text/html', encoding = '', length = -1) 238 payload = uri.bytesize + mime_type.bytesize + encoding.bytesize + 7 + 8 239 self.write_int(payload) 240 self.write_byte(CTIP2::REQ_START_MAIN) 241 self.write_bytes(uri) 242 self.write_bytes(mime_type) 243 self.write_bytes(encoding) 244 self.write_long(length) 245 self.flush 246 end
req_write(b)
click to toggle source
res_next()
click to toggle source
次のレスポンスを取得します。
結果ハッシュには次のデータが含まれます。
-
‘type’ レスポンスタイプ
-
‘anchorId’ 挿入する場所の直後のフラグメントID
-
‘level’ エラーレベル
-
‘error’ エラーメッセージ
-
‘id’ 断片ID
-
‘progress’ 処理済バイト数
-
‘bytes’ データのバイト列
- 戻り値
-
レスポンス
end¶ ↑
# File CTI/CTIP2/CTIP2.rb 289 def res_next 290 payload = self.read_int 291 type = self.read_byte 292 293 case type 294 when CTIP2::RES_ADD_BLOCK, CTIP2::RES_EOF, CTIP2::RES_NEXT 295 return { 296 'type' => type, 297 } 298 299 when CTIP2::RES_START_DATA 300 uri = self.read_bytes 301 mime_type = self.read_bytes 302 encoding = self.read_bytes 303 length = self.read_long 304 return { 305 'type' => type, 306 'uri' => uri, 307 'mime_type' => mime_type, 308 'encoding' => encoding, 309 'length' => length 310 } 311 312 when CTIP2::RES_MAIN_LENGTH, CTIP2::RES_MAIN_READ 313 length = self.read_long 314 return { 315 'type' => type, 316 'length' => length 317 } 318 319 when CTIP2::RES_INSERT_BLOCK, CTIP2::RES_CLOSE_BLOCK 320 block_id = self.read_int 321 return { 322 'type' => type, 323 'block_id' => block_id 324 } 325 326 when CTIP2::RES_MESSAGE 327 code = self.read_short 328 payload -= 1 + 2 329 message = self.read_bytes 330 payload -= 2 + message.bytesize 331 args = [] 332 while payload > 0 333 arg = self.read_bytes 334 payload -= 2 + arg.bytesize 335 args << arg 336 end 337 return { 338 'type' => type, 339 'code' => code, 340 'message' => message, 341 'args' => args 342 } 343 344 when CTIP2::RES_BLOCK_DATA 345 length = payload - 5 346 block_id = self.read_int 347 bytes = self.read(length) 348 return { 349 'type' => type, 350 'block_id' => block_id, 351 'bytes' => bytes, 352 'length' => length 353 } 354 355 when CTIP2::RES_DATA 356 length = payload - 1 357 bytes = self.read(length) 358 return { 359 'type' => type, 360 'bytes' => bytes, 361 'length' => length 362 } 363 364 when CTIP2::RES_RESOURCE_REQUEST 365 uri = self.read_bytes 366 return { 367 'type' => type, 368 'uri' => uri 369 } 370 371 when CTIP2::RES_ABORT 372 mode = self.read_byte 373 code = self.read_short 374 payload -= 1 + 1 + 2 375 message = self.read_bytes 376 payload -= 2 + message.bytesize 377 args = [] 378 while payload > 0 379 arg = self.read_bytes 380 payload -= 2 + arg.bytesize 381 args << arg 382 end 383 return { 384 'type' => type, 385 'mode' => mode, 386 'code' => code, 387 'message' => message, 388 'args' => args 389 } 390 391 else 392 raise "Bad response type:#{type}" 393 end 394 end
write_byte(b)
click to toggle source
write_bytes(b)
click to toggle source
write_int(a)
click to toggle source