protocol-http2 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 07e136ae45032565eec301ae8ed9ad6e3fef788325a55f2320e61d5d4c421251
4
- data.tar.gz: 553f5a65749ccfe5ddb96a70aa71d1682a2894c91056b4c29f19368dc8cdef10
3
+ metadata.gz: 802763909c7326fe42e70a217a13a31828760c673868b3b7fbcd2e99174e0423
4
+ data.tar.gz: 314093df7a84ae72929af8a1ae25d1b6f8363c1b94ee132196ad6e076b03e0f5
5
5
  SHA512:
6
- metadata.gz: accd7dd026ccba821544eb29c3c2d72c5a3894977cf564b48b8cc96de1b6fb041e3a8876f056844f9bcf4a0b8790581674402eab6be63ee7992203bfe1b544b9
7
- data.tar.gz: '028d74d81f74dcd289330c2cb2f72793c55f9f887c2bf7e5f73c2eb7c7c5ff8371b654725f2a18c5849a2f441c286f91fabe90b949bddbf79e6b05292128172a'
6
+ metadata.gz: '09d0303e8166c468719bad98aa6d4d2f61d412317ef05f8c55d72a5814f7980b36a5d9f61ee85d7a003eada87d864bac81ad28d1a244e2ed95d431c20225c09a'
7
+ data.tar.gz: 046fe8e2b1d1f3a85013ebf188975d004a229491fc7ea93c9a46f18c68fb53be1d7876564f42663d292e88bd204d1aa81820724e732bb784b106e526a0b060d1
@@ -182,7 +182,7 @@ module Protocol
182
182
  stream.add_child(self)
183
183
  end
184
184
 
185
- def update_priority priority
185
+ def process_priority priority
186
186
  dependent_id = priority.stream_dependency
187
187
 
188
188
  if dependent_id == @id
@@ -250,7 +250,7 @@ module Protocol
250
250
  if frame.end_stream?
251
251
  @state = :half_closed_local
252
252
  else
253
- @state = :open
253
+ open!
254
254
  end
255
255
  elsif @state == :reserved_local
256
256
  frame = write_headers(*args)
@@ -308,6 +308,12 @@ module Protocol
308
308
  end
309
309
  end
310
310
 
311
+ def open!
312
+ @state = :open
313
+
314
+ return self
315
+ end
316
+
311
317
  # Transition the stream into the closed state.
312
318
  # @param error_code [Integer] the error code if the stream was closed due to a stream reset.
313
319
  def close!(error_code = nil)
@@ -318,6 +324,8 @@ module Protocol
318
324
  end
319
325
 
320
326
  self.close(error)
327
+
328
+ return self
321
329
  end
322
330
 
323
331
  def send_reset_stream(error_code = 0)
@@ -333,23 +341,27 @@ module Protocol
333
341
  end
334
342
  end
335
343
 
336
- private def process_headers(frame)
344
+ protected def process_headers(frame)
337
345
  # Receiving request headers:
338
346
  priority, data = frame.unpack
339
347
 
340
348
  if priority
341
- self.update_priority(priority)
349
+ self.process_priority(priority)
342
350
  end
343
351
 
344
352
  @connection.decode_headers(data)
345
353
  end
346
354
 
355
+ protected def ignore_headers(frame)
356
+ # Async.logger.warn(self) {"Received headers in state: #{@state}!"}
357
+ end
358
+
347
359
  def receive_headers(frame)
348
360
  if @state == :idle
349
361
  if frame.end_stream?
350
362
  @state = :half_closed_remote
351
363
  else
352
- @state = :open
364
+ open!
353
365
  end
354
366
 
355
367
  return process_headers(frame)
@@ -369,8 +381,9 @@ module Protocol
369
381
  end
370
382
 
371
383
  return process_headers(frame)
384
+ elsif self.closed?
385
+ ignore_headers(frame)
372
386
  else
373
- Async.logger.warn(self) {"Received headers in state: #{@state}!"}
374
387
  self.send_reset_stream(Error::STREAM_CLOSED)
375
388
  end
376
389
  end
@@ -380,6 +393,10 @@ module Protocol
380
393
  frame.unpack
381
394
  end
382
395
 
396
+ def ignore_data(frame)
397
+ # Async.logger.warn(self) {"Received headers in state: #{@state}!"}
398
+ end
399
+
383
400
  # DATA frames are subject to flow control and can only be sent when a stream is in the "open" or "half-closed (remote)" state. The entire DATA frame payload is included in flow control, including the Pad Length and Padding fields if present. If a DATA frame is received whose stream is not in "open" or "half-closed (local)" state, the recipient MUST respond with a stream error of type STREAM_CLOSED.
384
401
  def receive_data(frame)
385
402
  if @state == :open
@@ -398,9 +415,10 @@ module Protocol
398
415
  if frame.end_stream?
399
416
  close!
400
417
  end
418
+ elsif self.closed?
419
+ ignore_data(frame)
401
420
  else
402
421
  # If a DATA frame is received whose stream is not in "open" or "half-closed (local)" state, the recipient MUST respond with a stream error (Section 5.4.2) of type STREAM_CLOSED.
403
- Async.logger.warn(self) {"Received data in state: #{@state}!"}
404
422
  self.send_reset_stream(Error::STREAM_CLOSED)
405
423
  end
406
424
  end
@@ -408,7 +426,7 @@ module Protocol
408
426
  # Change the priority of the stream both locally and remotely.
409
427
  def priority= priority
410
428
  send_priority(priority)
411
- update_priority(priority)
429
+ process_priority(priority)
412
430
  end
413
431
 
414
432
  # The current local priority of the stream.
@@ -421,23 +439,25 @@ module Protocol
421
439
  end
422
440
 
423
441
  def receive_priority(frame)
424
- self.update_priority(frame.unpack)
442
+ self.process_priority(frame.unpack)
443
+ end
444
+
445
+ def ignore_reset_stream(frame)
446
+ # Async.logger.warn(self) {"Received reset stream (#{error_code}) in state: #{@state}!"}
425
447
  end
426
448
 
427
449
  def receive_reset_stream(frame)
428
- error_code = frame.unpack
429
-
430
- if @state != :idle
431
- if self.closed?
432
- Async.logger.warn(self) {"Received reset stream (#{error_code}) in state: #{@state}!"}
433
- else
434
- close!(error_code)
435
- end
450
+ if @state == :idle
451
+ # If a RST_STREAM frame identifying an idle stream is received, the recipient MUST treat this as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
452
+ raise ProtocolError, "Cannot receive reset stream in state: #{@state}!"
453
+ elsif self.closed?
454
+ ignore_reset_stream(frame)
455
+ else
456
+ error_code = frame.unpack
457
+
458
+ close!(error_code)
436
459
 
437
460
  return error_code
438
- else
439
- # If a RST_STREAM frame identifying an idle stream is received, the recipient MUST treat this as a connection error (Section 5.4.1) of type PROTOCOL_ERROR.
440
- raise ProtocolError, "Cannot receive reset stream (#{error_code}) in state: #{@state}!"
441
461
  end
442
462
  end
443
463
 
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Protocol
22
22
  module HTTP2
23
- VERSION = "0.8.1"
23
+ VERSION = "0.8.2"
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-http2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams