# GIOP

O GIOP (General Inter-ORB Protocol), em computação distribuída, é um protocolo abstrato pelo qual os módulos ORB se comunicam. Os padrões associados com este protocolo são mantidos pelo Object Management Group (OMG).
O protocolo IIOP (Internet Inter-Orb Protocol) é uma implementação do GIOP para o protocolo de rede TCP/IP. Também pode ser descrito como uma realização concreta das definições abstratas do GIOP.

## Tipos de mensagens

O OMG define três partes do GIOP:
* O CDR (Common Data Representation) — utilizado para representar os tipos primitivos dos parâmetros e resultados de envio de mensagens a objetos remotos.
* O IOR (Interoperable Object Reference) — define o formato de uma referência a um objeto remoto. Uma IDR típica contém a versão do protocolo de comunicação, o endereço do servidor e uma sequência de bytes que identifica o objeto remoto.
* Os formatos das mensagens trocadas — as mensagens são trocadas entre os agentes para facilitar as requisições dos objetos, localização da implementação dos objetos, e para gerenciar canais de comunicação. As mensagens definidas são:
** Request — enviada para invocar um método remoto.
** Reply — retornada em resposta a um request. Esta mensagem normalmente contém os dados retornados do método remoto. Em alguns casos o reply pode conter uma instrução de redirecionamento para a descrição de uma exceção que foi lançada pelo servidor.
** CancelRequest — utilizada para cancelar uma mensagem de request previamente enviada.
** LocateRequest — utilizada para verificar se o servidor conhece e suporta determinado objeto remoto e, em caso de resposta negativa, determinar para qual endereço o request deve ser enviado.
** LocateReply — enviada pelo servidor em resposta a uma mensagem do tipo LocateRequest. Esta mensagem pode conter, se for o caso, o endereço do objeto remoto que foi movido.
** CloseConnection — enviada pelo servidor para indicar que ele não mais responderá às mensagens.
** MessageError — enviada em resposta à mensagens mal formadas ou inválidas. Ela não é utilizada para reportar erros que não sejam do sistema de mensagens; tal tipo de erro é reportado através de mensagens do tipo reply.
** Fragment — é uma mensagem que indica uma sequência de mensagens. As mensagens de tamanho grande podem ser divididas em mensagens menores (fragmentos).

## Formato binário

Em uma análise, as mensagens do protocolo GIOP podem ser facilmente reconhecidas pelo seu cabeçalho característico:
* Os quatro caracteres ASCII: G I O P.
* Os dois bytes que definem a versão do protocolo.
* Um byte que indica o início da mensagem. O bit menos significativo define a ordem do byte (0 - big endian, 1 - little endian).
* Um byte que define o tipo da mensagem trafegada (reply, request, fragment e etc.).
* Uma "palavra" de 4 bytes que define o tamanho da mensagem (com exceção do cabeçalho).
As mensagens também podem incluir fragmentos de dados arbitrários, identificados por marcadores inteiros padronizados. Estes fragmentos adicionais de dados são chamados de "contexto de serviço" e são utilizados para estender o padrão de comunicação quando necessário. Existem contextos padronizados para descrever exceções lançadas, para definir a utilização de um conjunto de caracteres específicos e etc. Através de mecanismos baseados no padrão interceptor é possível inserir e obter contextos de serviço específicos nas mensagens trafegadas.

## Situação legal da sigla GIOP

As marcas CORBA, IIOP e OMG são registradas pelo Object Management Group e devem ser utilizadas com cuidado. A sigla, por outro lado, não é uma marca registrada da OMG . Por este motivo é permitido legalmente citar que uma aplicação implementa uma arquitetura baseada no protocolo GIOP.