ReactOS 0.4.16-dev-1946-g52006dd
epm.idl File Reference
import "dcetypes.idl";
Include dependency graph for epm.idl:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

interface  epm
 
struct  epm::ept_entry_t
 

Functions

RPC_STATUS WINAPI TowerExplode (const twr_t *tower, PRPC_SYNTAX_IDENTIFIER object, PRPC_SYNTAX_IDENTIFIER syntax, char **protseq, char **endpoint, char **address)
 
RPC_STATUS WINAPI TowerConstruct (const RPC_SYNTAX_IDENTIFIER *object, const RPC_SYNTAX_IDENTIFIER *syntax, const char *protseq, const char *endpoint, const char *address, twr_t **tower)
 

Function Documentation

◆ TowerConstruct()

RPC_STATUS WINAPI TowerConstruct ( const RPC_SYNTAX_IDENTIFIER object,
const RPC_SYNTAX_IDENTIFIER syntax,
const char protseq,
const char endpoint,
const char address,
twr_t **  tower 
)

Definition at line 595 of file rpc_epmap.c.

599{
600 size_t tower_size;
602 unsigned char *p;
603 twr_uuid_floor_t *object_floor;
604 twr_uuid_floor_t *syntax_floor;
605
606 TRACE("(%p, %p, %s, %s, %s, %p)\n", object, syntax, debugstr_a(protseq),
608
609 *tower = NULL;
610
611 status = RpcTransport_GetTopOfTower(NULL, &tower_size, protseq, address, endpoint);
612
613 if (status != RPC_S_OK)
614 return status;
615
616 tower_size += sizeof(u_int16) + sizeof(*object_floor) + sizeof(*syntax_floor);
617 *tower = I_RpcAllocate(FIELD_OFFSET(twr_t, tower_octet_string[tower_size]));
618 if (!*tower)
620
621 (*tower)->tower_length = tower_size;
622 p = &(*tower)->tower_octet_string[0];
623 *(u_int16 *)p = 5; /* number of floors */
624 p += sizeof(u_int16);
625 object_floor = (twr_uuid_floor_t *)p;
626 p += sizeof(*object_floor);
627 syntax_floor = (twr_uuid_floor_t *)p;
628 p += sizeof(*syntax_floor);
629
630 object_floor->count_lhs = sizeof(object_floor->protid) + sizeof(object_floor->uuid) +
631 sizeof(object_floor->major_version);
632 object_floor->protid = EPM_PROTOCOL_UUID;
633 object_floor->count_rhs = sizeof(object_floor->minor_version);
634 object_floor->uuid = object->SyntaxGUID;
635 object_floor->major_version = object->SyntaxVersion.MajorVersion;
636 object_floor->minor_version = object->SyntaxVersion.MinorVersion;
637
638 syntax_floor->count_lhs = sizeof(syntax_floor->protid) + sizeof(syntax_floor->uuid) +
639 sizeof(syntax_floor->major_version);
640 syntax_floor->protid = EPM_PROTOCOL_UUID;
641 syntax_floor->count_rhs = sizeof(syntax_floor->minor_version);
642 syntax_floor->uuid = syntax->SyntaxGUID;
643 syntax_floor->major_version = syntax->SyntaxVersion.MajorVersion;
644 syntax_floor->minor_version = syntax->SyntaxVersion.MinorVersion;
645
646 status = RpcTransport_GetTopOfTower(p, &tower_size, protseq, address, endpoint);
647 if (status != RPC_S_OK)
648 {
649 I_RpcFree(*tower);
650 *tower = NULL;
651 return status;
652 }
653 return RPC_S_OK;
654}
unsigned short u_int16
Definition: dcetypes.idl:33
#define NULL
Definition: types.h:112
#define EPM_PROTOCOL_UUID
Definition: epm_towers.h:33
GLuint address
Definition: glext.h:9393
GLfloat GLfloat p
Definition: glext.h:8902
#define debugstr_a
Definition: kernel32.h:31
RPC_STATUS RpcTransport_GetTopOfTower(unsigned char *tower_data, size_t *tower_size, const char *protseq, const char *networkaddr, const char *endpoint)
#define RPC_S_OK
Definition: rpcnterr.h:22
void WINAPI I_RpcFree(void *Object)
Definition: rpcrt4_main.c:755
void *WINAPI I_RpcAllocate(unsigned int Size)
Definition: rpcrt4_main.c:747
long RPC_STATUS
Definition: rpc.h:48
#define TRACE(s)
Definition: solgame.cpp:4
RPC_VERSION SyntaxVersion
Definition: rpcdcep.h:33
unsigned short MajorVersion
Definition: rpcdcep.h:27
unsigned short MinorVersion
Definition: rpcdcep.h:28
Definition: nis.h:10
Definition: ps.c:97
Definition: rpc.c:49
u_int16 minor_version
Definition: epm_towers.h:60
u_int16 count_lhs
Definition: epm_towers.h:55
u_int16 count_rhs
Definition: epm_towers.h:59
u_int16 major_version
Definition: epm_towers.h:58
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define RPC_S_OUT_OF_RESOURCES
Definition: winerror.h:1388

Referenced by epm_register(), ept_map(), RpcEpResolveBinding(), and RpcEpUnregister().

◆ TowerExplode()

RPC_STATUS WINAPI TowerExplode ( const twr_t tower,
PRPC_SYNTAX_IDENTIFIER  object,
PRPC_SYNTAX_IDENTIFIER  syntax,
char **  protseq,
char **  endpoint,
char **  address 
)

Definition at line 523 of file rpc_epmap.c.

526{
527 size_t tower_size;
529 const unsigned char *p;
530 u_int16 floor_count;
531 const twr_uuid_floor_t *object_floor;
532 const twr_uuid_floor_t *syntax_floor;
533
534 TRACE("(%p, %p, %p, %p, %p, %p)\n", tower, object, syntax, protseq,
536
537 if (protseq)
538 *protseq = NULL;
539 if (endpoint)
540 *endpoint = NULL;
541 if (address)
542 *address = NULL;
543
544 tower_size = tower->tower_length;
545
546 if (tower_size < sizeof(u_int16))
548
549 p = &tower->tower_octet_string[0];
550
551 floor_count = *(const u_int16 *)p;
552 p += sizeof(u_int16);
553 tower_size -= sizeof(u_int16);
554 TRACE("floor_count: %d\n", floor_count);
555 /* FIXME: should we do something with the floor count? at the moment we don't */
556
557 if (tower_size < sizeof(*object_floor) + sizeof(*syntax_floor))
559
560 object_floor = (const twr_uuid_floor_t *)p;
561 p += sizeof(*object_floor);
562 tower_size -= sizeof(*object_floor);
563 syntax_floor = (const twr_uuid_floor_t *)p;
564 p += sizeof(*syntax_floor);
565 tower_size -= sizeof(*syntax_floor);
566
567 if ((object_floor->count_lhs != sizeof(object_floor->protid) +
568 sizeof(object_floor->uuid) + sizeof(object_floor->major_version)) ||
569 (object_floor->protid != EPM_PROTOCOL_UUID) ||
570 (object_floor->count_rhs != sizeof(object_floor->minor_version)))
572
573 if ((syntax_floor->count_lhs != sizeof(syntax_floor->protid) +
574 sizeof(syntax_floor->uuid) + sizeof(syntax_floor->major_version)) ||
575 (syntax_floor->protid != EPM_PROTOCOL_UUID) ||
576 (syntax_floor->count_rhs != sizeof(syntax_floor->minor_version)))
578
579 status = RpcTransport_ParseTopOfTower(p, tower_size, protseq, address, endpoint);
580 if ((status == RPC_S_OK) && syntax && object)
581 {
582 syntax->SyntaxGUID = syntax_floor->uuid;
583 syntax->SyntaxVersion.MajorVersion = syntax_floor->major_version;
584 syntax->SyntaxVersion.MinorVersion = syntax_floor->minor_version;
585 object->SyntaxGUID = object_floor->uuid;
586 object->SyntaxVersion.MajorVersion = object_floor->major_version;
587 object->SyntaxVersion.MinorVersion = object_floor->minor_version;
588 }
589 return status;
590}
RPC_STATUS RpcTransport_ParseTopOfTower(const unsigned char *tower_data, size_t tower_size, char **protseq, char **networkaddr, char **endpoint)
byte tower_octet_string[1]
Definition: rpc.c:51
unsigned32 tower_length
Definition: rpc.c:50
#define EPT_S_NOT_REGISTERED
Definition: winerror.h:1418

Referenced by ept_delete(), ept_insert(), ept_map(), and RpcEpResolveBinding().