GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Net::SPDY::Framer(3) User Contributed Perl Documentation Net::SPDY::Framer(3)

Net::SPDY::Framer - SPDY protocol implementation

Please read carefully: This is an ALPHA stage software. In particular this means that even though it probably won't kill your cat, re-elect George W. Bush nor install Solaris 11 Express edition to your hard drive, it is in active development, functionality is missing and no APIs are stable.

See TODO file in the distribution to learn about missing and planned functionality. You are more than welcome to join the development and submit patches with fixes or enhancements. Bug reports are probably not very useful at this point.

  use Net::SPDY::Framer;

  my $framer = new Net::SPDY::Framer ({
      compressor => new Net::SPDY::Compressor,
      socket => $socket,
  });

  $framer->write_frame(
        type => Net::SPDY::Framer::PING,
        data => 0x706c6c6d,
  );
  while (my %frame = $framer->read_frame) {
        last if $frame{control} and $frame{type} eq Net::SPDY::Framer::PING;
  }

Net::SPDY::Framer provides SPDY protocol access on top of a network socket. It serializes and deserializes packets as they are, without implementing any other logic. For session management, see Net::SPDY::Session.

For the actual values refer to the protocol specification.
Frame types
"SYN_STREAM", "SYN_REPLY", "RST_STREAM", "SETTINGS", "PING", "GOAWAY", "HEADERS", "WINDOW_UPDATE", "CREDENTIAL".
Frame flags
"FLAG_FIN", "FLAG_UNIDIRECTIONAL", "FLAG_SETTINGS_CLEAR_SETTINGS".
SETTINGS flags
"FLAG_SETTINGS_PERSIST_VALUE", "FLAG_SETTINGS_PERSISTED".
SETTINGS values
"SETTINGS_UPLOAD_BANDWIDTH", "SETTINGS_DOWNLOAD_BANDWIDTH", "SETTINGS_ROUND_TRIP_TIME", "SETTINGS_MAX_CONCURRENT_STREAMS", "SETTINGS_CURRENT_CWND", "SETTINGS_DOWNLOAD_RETRANS_RATE", "SETTINGS_INITIAL_WINDOW_SIZE", "SETTINGS_CLIENT_CERTIFICATE_VECTOR_SIZE".

compressor
Net::SPDY::Compressor object representing the Zlib streams (one in each direction) used by the framer.
socket
IO::Handle instance that is used for actual network communication.

These are the data structures that are consumed by "write_frame()" and produced by "read_frame()" methods. Their purpose is to coveniently represent the fields of serialized SPDY frames. Please refer to the protocol specification ("SEE ALSO" section) for descriptions of the actual fields.

Not all fields are mandatory at all occassions. Serializer may assume sane values for certain fields, that are marked as Input only below, or provided with defaults.

SYN_STREAM
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::SYN_STREAM,
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for SYN_STREAM
      stream_id   => <stream_id>,
      associated_stream_id => <associated_stream_id>,

      priority    => <priority>,
      slot        => <slot>,

      headers     =>  [
          ':version'  => <version>,   # E.g. 'HTTP/1.1'
          ':scheme'   => <scheme>,    # E.g. 'https'
          ':host'     => <host>,      # E.g. 'example.net:443',
          ':method'   => <method>,    # E.g. 'GET', 'HEAD',...
          ':path'     => <path>,      # E.g. '/something',
          ... # HTTP headers, e.g. Accept => 'text/plain'
      ],
  )
    
SYN_REPLY
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::SYN_REPLY,
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for SYN_REPLY
      stream_id   => <stream_id>,

      headers     =>  [
          ':version'  => <version>,   # E.g. 'HTTP/1.1'
          ':status'   => <status>,    # E.g. '500 Front Fell Off',
          ... # HTTP headers, e.g. 'Content-Type' => 'text/plain'
      ],
  )
    
RST_STREAM
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::RST_STREAM
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for RST_STREAM
      stream_id   => <stream_id>,
      status      => <status>,
  )
    
SETTINGS
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::SYN_SETTINGS
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for SETTINGS
      entries     => <entries>,   # Input only

      id_values   =>  [
          {
              flags   => <flags>,
              id  => <id>,
              value   => <value>,
          },
          ...
      ],
  )
    
PING
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::PING
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for PING
      id          => <id>,        # E.g. 0x706c6c6d
  )
    
GOAWAY
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::GOAWAY
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for GOAWAY
      last_good_stream_id => <last_good_stream_id>,
      status      => <status>,
  )
    
HEADERS
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::HEADERS,
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for HEADERS
      stream_id   => <stream_id>,

      headers     =>  [
          ... # HTTP headers, e.g. Accept => 'text/plain'
      ],
  )
    
WINDOW_UPDATE
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 3,           # Input only
      type        => Net::SPDY::Framer::WINDOW_UPDATE
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for WINDOW_UPDATE
      stream_id   => <stream_id>,
      delta_window_size => <delta_window_size>,
  )
    
CREDENTIAL
  (
      # Common to control frames
      control     => 1,           # Input only
      version     => 1,           # Input only
      type        => Net::SPDY::Framer::CREDENTIAL
      flags       => <flags>,     # Defaults to 0
      length      => <length>,    # Input only

      # Specific for CREDENTIAL
      slot        => <slot>,
      proof       => <proof>,
      certificates => [ <certificate>, ... ],
  )
    

new { socket => SOCKET, compressor => COMPRESSOR }
Creates a new framer instance. You need to create and pass both the socket for the network communication and the compressor instance.
write_frame FRAME
Serializes frame and writes it to the network socket.
read_frame
Reads frame from the network socket and returns it deserialized.

  • <https://developers.google.com/speed/spdy/> -- SPDY project web site
  • <http://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3> -- Protocol specification
  • Net::SPDY::Session -- SPDY session implementation
  • Net::SPDY::Compressor -- SPDY header compression

Source code for Net::SPDY is kept in a public GIT repository. Visit <https://github.com/lkundrak/net-spdy>.

Bugs reports and feature enhancement requests are tracked at <https://rt.cpan.org/Public/Dist/Display.html?Name=Net::SPDY>.

Copyright 2012, Lubomir Rintel

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

Lubomir Rintel "lkundrak@v3.sk"
2022-04-08 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.