예제 #1
0
DWORD
VmDnsSerializeDnsSrvRecord(
    VMDNS_RECORD_DATA Data,
    PVMDNS_MESSAGE_BUFFER pVmDnsBuffer
    )
{
    DWORD dwError = 0;
    UINT16 uSize = 0;

    if (!pVmDnsBuffer)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsSrvGetRDataLength(
                                Data,
                                &uSize,
                                pVmDnsBuffer->bTokenizeDomainName
                                );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteUINT16ToBuffer(
                                uSize,
                                pVmDnsBuffer
                                );
    BAIL_ON_VMDNS_ERROR(dwError);


    dwError = VmDnsWriteUINT16ToBuffer(
                                Data.SRV.wPriority,
                                pVmDnsBuffer
                                );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteUINT16ToBuffer(
                                Data.SRV.wWeight,
                                pVmDnsBuffer
                                );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteUINT16ToBuffer(
                                Data.SRV.wPort,
                                pVmDnsBuffer
                                );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteDomainNameToBuffer(
                                Data.SRV.pNameTarget,
                                pVmDnsBuffer,
                                pVmDnsBuffer->bTokenizeDomainName
                                );
    BAIL_ON_VMDNS_ERROR(dwError);

cleanup:

    return dwError;
error:
    goto cleanup;
}
예제 #2
0
DWORD
VmDnsWriteRecordToBuffer(
    PVMDNS_RECORD pDnsRecord,
    PVMDNS_MESSAGE_BUFFER pVmDnsBuffer
    )
{
    DWORD dwError = 0;
    DWORD dwIndex = 0;

    if (!pDnsRecord || !pVmDnsBuffer)
    {
        dwError = ERROR_INVALID_PARAMETER;
        BAIL_ON_VMDNS_ERROR(dwError);
    }

    dwError = VmDnsWriteDomainNameToBuffer(
                                  pDnsRecord->pszName,
                                  pVmDnsBuffer,
                                  pVmDnsBuffer->bTokenizeDomainName
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteUINT16ToBuffer(
                                  pDnsRecord->dwType,
                                  pVmDnsBuffer
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteUINT16ToBuffer(
                                  pDnsRecord->iClass,
                                  pVmDnsBuffer
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

    dwError = VmDnsWriteUINT32ToBuffer(
                                  pDnsRecord->dwTtl,
                                  pVmDnsBuffer
                                  );
    BAIL_ON_VMDNS_ERROR(dwError);

    for (; dwIndex < gRecordMethodMapSize; ++dwIndex)
    {
        if (pDnsRecord->dwType == gRecordMethods[dwIndex].type)
        {
            dwError = gRecordMethods[dwIndex].pfnSerialize(
                                                    pDnsRecord->Data,
                                                    pVmDnsBuffer
                                                    );
            BAIL_ON_VMDNS_ERROR(dwError);
            break;
        }
    }
cleanup:

    return dwError;
error:

    goto cleanup;
}