функция | параметры |
InitIONLibrary |
Синтаксис:void InitIONLibrary (void); Параметры у данной функции отсутствуют. Основная цель данной функции - инициализация использования heredes.dll в вашем приложении. Данную функцию Ваше приложение должно вызвать однократно перед использованием Heredes API. |
функция | параметры |
CreateIONHandle |
Синтаксис:HANDLE CreateIONHandle (void); Параметры у данной функции отсутствуют. Создает окружение для нового исходящего (клиент) подключения. Возвращает дескриптор подключения. Пример: HANDLE hDcon = CreateIONHandle();
|
функция | параметры |
void CloseIONHandle |
Синтаксис:CloseIONHandle(HANDLE hConn);
в качестве параметра принимает дескриптор подключения полученый функцией CreateIONHandle.
Функция закрывает дескрипторы созданные функцией CreateIONHandle и освобождает регион памяти занятый окружением подключения.
Пример:
CloseIONHandle(hDcon);
|
функция | параметры |
void RegIONId |
Синтаксис:void RegIONId(LPDWORD LocValid,
LPDWORD LocId); LocValid - указатель на переменную которая получит код подтверждения владельца идентификатора. Значение переменной не учитывается при значении LocId равном нулю LocId - указатель на переменную которая получит личный идентификатор. Переменная должна быть равна нулю если требуется зарегистрировать новый идентификатор. Данная функция работает синхронно. не следует без нужды вызывать данную функцию каждый раз при запуске программы, вместо этого следует сохранить идентификатор пользователя и код подтверждения для дальнейшего использования. Функция не возвращает значений но в случае успеха переменные LocValid и LocId содержат значения отличные от нуля. |
Установление соединение между пользователями осуществляется посредством личных уникальных идентификаторов.
Идентификатор пользователя это число от 0х1 до 0хFFFFFFF0 (32 бита).
Когда пользователь запрашивает у STUN сервера параметры исходящего подключения либо уведомляет STUN сервер о готовности принять входящее соединение он передает личный идентификатор и ключ подтверждающий регистрацию.
Ключ подтверждения идентификатора это так же число от 0х1 до 0хFFFFFFF0 (32 бита).
STUN сервер сверяет соответствие личного идентификатора с ключем подтверждения.
Таким образом осуществляется два уровня безопасности: проверка STUN сервером пользователя на валидность (не считается безопасной) и использование пользователями секретных ключей шифрования которые могут не передаваться по сети в зависимости от реализации вашим программным обеспечением. Кроме того Вы можете при передаче личных данных осуществлять свою систему шифрования, алгоритм которой может быть известен только Вам.
Для регистрации нового пользователя и получения личного идентификатора и кода подтверждения следует использовать функцию RegIONId.
Для определения текущего состояния соединения вы можете использовать Callback функцию, которая получает уведомления о состоянии - статус состояния
статус | описание |
0 | соединение с STUN сервером не установлено |
1 | соединение с STUN сервером активно |
2 | получены данные для прямого подключения |
3 | попытка установить прямое подключение и проверка секретного ключа |
4 | ошибка секретного ключа шифрования |
5 | секретный ключ согласован |
6 | соединение успешно установлено, возможен прямой обмен данными |
функция | параметры |
int IONGetStatus |
Синтаксис: int IONGetStatus(HANDLE hConn);
hConn - дескриптор подключения полученный функцией CreateIONHandle или IONWaitConnection
Возвращает номер состояния подключения. Подробнее о состояниях подключения.
|
функция | параметры |
BOOL IONConnectToId |
Синтаксис:void IONConnectToId(HANDLE hConn,
p>hConn - дескриптор подключения полученный функцией CreateIONHandle
pId - зарезервировано для будущего использования. LocValid - указатель на содержащую код подтверждения владельца идентификатора. Переменная должна быть равна нулю. LocId - указатель на переменную содержащую личный идентификатор. Переменная должна быть равна нулю. pSecStr - адресс 8-ми байтного массива, содержащего ключ шифрования CBSelUser - указатель на функцию-обработчик события интерфейса. Может быть NULL если не требуется обращения к локальному списку идентификаторов. CBStatus - указатель на функцию-обработчик хода подключения (уведомлений о текущем статусе). CBUserData - указатель на функцию-обработчик при входящих пользовательских данных, отправленных функцией IONSendUserData. Может быть NULL если входящие пользовательские данные не ожидаются. Функция возвращает TRUE в случае успеха или FALSE если подключение не удалось. |
функция | параметры |
CBUserData | Синтаксис:
hConn - дескриптор подключения полученный функцией CreateIONHandle pData - указатель на массив входящих данных datSize - длинна пользовательских данных в байтах функция возвращает TRUE в случае успеха или FALSE если подключение не удалось |
функция | параметры |
void IONDisconnect | Синтаксис: void IONDisconnect(HANDLE hConn);
hConn - дескриптор подключения полученный функцией CreateIONHandle или WaitIONConnection Разрывает текущее активное соединение или прекращает попытки установить соединение. |
функция | параметры |
IONWaitConnection | Синтаксис: HANDLE IONWaitConnection(LPDWORD LocValid,
LocValid - указатель на переменную которая получит код подтверждения владельца идентификатора. Значение переменной не учитывается при значении LocId равном нулю LocId - указатель на переменную которая получит личный идентификатор. Переменная должна быть равна нулю если требуется зарегистрировать новый идентификатор CBUDATA - указатель на процедуру-обработчик CBUserData входящих пользовательских данных отправленных c помощью SendUserData функция запускает поток ожидания входящих соединений и возвращает идентификатор подключения. Для освобождения памяти и завершения потока ожидания используйте IONTerminate |
функция | параметры |
void IONTerminate | Синтаксис: void IONTerminate(HANDLE hConn);
hConn - дескриптор подключения полученный функцией IONWaitConnection Разрывает текущее активное соединение и завершает поток ожидающий входящих соединений. Не следует использовать данную функцию с параметром полученным CreateIONHandle .Отличие от IONDisconnect в том что в случае вызова IONTerminate, завершается и ожидающий поток, таким образом повторное подключение к потоку станет невозможным . |
функция | параметры |
SendUserData | Синтаксис:
int SendUserData(HANDLE hConn,
hConn - дескриптор подключения полученный функцией CreateIONHandle или IONWaitConnection hUserDataAddr - указатель строку с произвольными пользовательскими данными LongData - длинна пользовательских данных Функция возвращает количество байт поставленных в очередь на отправку и не гарантирует их доставку. Ваше приложение должно организовать при необходимости подтверждение получения данных. Следует учитывать, что серверное приложение будет отправлять пользовательские данные блоками от 30 до 1006 байт и Ваше приложение должно самостоятельно разбить отправляемые данные на части и маркировать в каком порядке. Их следует собрать. Так же Ваше приложение должно обеспечить целостность полученных данных, запросив повторную отправку утерянного блока если требуется гарантированная доставка. Ваше приложение может использовать дополнительные произвольные алгоритмы шифрования перед вызовом SendUserData для усиления безопасности. Следует принять во внимание, что SendUserData может использоваться только для передачи данных при активном коннекте (статус 6). Также, отправка производится блоками 992 байта. В случае отправки блока большего размера, будут отправлены только первые 992 байта. Функция возвращает количество фактически переданных байт. |
функция | параметры |
IONSendFileToId | Синтаксис:
int IONSendFileToId(LPDWORD pValid, LPDWORD pId, CBSELID CBSelUser, LPDWORD pHightDword);
pValid - указатель на переменную типа DWORD содержащую код подтверждения владельца идентификатора pId - указатель на переменную типа DWORD содержащую идентификатор CBSelUse - указатель на CALLBACK процедуру для обработки WM_COMMAND. Вы можете использовать данную функцию для предоставления пользователю выбора идентификатора, создания интерфейсов и тд. Может быть NULL если Id получателя пользователь вводит только вручную pHightDword - указатель на старшие 4 байта размера переданых байт фнкция возвращает младшие 4 байта размера переданных байт если старший бит в значении по адресу pHightDword установлен в 1 (значение более 0х80000000) значит произошла ошибка при передаче данных и файл передан не полностью. Ваше приложение должно самостоятельно решать как обрабатывать подобные ошибки Таким образом теоретическое верхнее ограничение на размер передаваемого файла соответствено 8 388 608 ТБт, тем не менее стоит учитывать что передача ведется поверх UDP и подвержена помехам, таким образом не исключены непредсказуемые сбои в процессе передачи, не все из которых способна обработать данная функция |
функция | параметры |
IONSetAudioParam | Синтаксис:
void IONSetAudioParam(HANDLE hConn, bool FPlay, LPCTSTR pFileOut, LPCTSTR pFileIn, CBAIN CBInAud);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection FPlay - флаг воспроизведения. Установите TRUE если вы не хотите воспроизводить входящий аудио поток. Одновременное указание FALSE в параметрах FPlay и NULL в pFileSpeak приведет к отказу принимать входящий аудиопоток. pFileMic - полный путь и имя файла для паралельной записи исходящего аудио. Для корректного воспроизведения записанного файла другими приложениями, например Windows Media Player или другими, следует указывать расширение файла *.wav. Данный параметр должен быть NULL если режим паралельной записи в файл не требуется. pFileSpeak - полный путь и имя файла для паралельной записи входящего аудио. Для корректного воспроизведения записанного файла другими приложениями, например Windows Media Player или другими, следует указывать расширение файла *.wav. Данный параметр должен быть NULL если режим паралельной записи в файл не требуется. CBInAud - адресс callback функции для реакции на входящий аудиопоток. может быть NULL Данная функция создает окружение и устанавливает параметры обработки для входящего и исходящего аудиопотока. Вы можете вызвать ее однажды и использовать стандартные установки для аудиосоединенй с любым Id или устанавливать индивидуально для каждого входящего или исходящего соединения Вы не обязаны вызывать данную функцию если Ваше приложение использует SendUserData для отправки аудиопотока, но это необходимо перед использованием аудио-функций Heredes API |
функция | параметры |
IONStartAudioStream | Синтаксис:
bool IONStartAudioStream(Handle hConn, int nSamplesPerSec);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection nSamplesPerSec - Частота дискретизации (Герц). Допустимые значения 8000, 11025, 22050, 44100. В случае если даное значение NULL - по умолчанию принимается частота 11025 Гц Вызов данной функции следует производить после установления соединения (статус соединения 6). Функция возвращает значение сразу после создания аудиоканала или в случае ошибки принимающей стороне стороне шлется уведомление о необходимости открыть доступ к динамикам устройства для воспроизведения, файлу для сохранения аудиопотока или паралельного воспроизведения и записи данных в файл В случае успеха, вызывающая сторона открывает доступ к микрофону в моно режиме (используется один аудиоканал). В случае невозможности получить доступ к устройствам воспроизведения аудио на принимающей стороне, доступ к микрофону так же не открывается и функция возвращает нулевое значениерезультат данной функции отличен от нуля в случае успеха. Передача аудиопотока начинается немедленно после согласования сторон на передачу Аудиопоток передается в формате PCM моно с указанной в параметре nSamplesPerSec частотой и при соответствующих параметрах сохраняется в формате wave Ваше приложение должно вызвать IONSetAudioParam для установки параметров перед использованием данной функции Ваше приложение должно обязательно вызвать IONStopAudioStream для корректного завершения передачи аудиопотока |
функция | параметры |
IONStopAudioStream | Синтаксис:
void IONStopAudioStream(Handle hConn);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection Функция уведомляет удаленныый ID о завершении передачи аудиопотока, что вызывает освобождение соответствующих аудиоустройств и закрытие всех открытых дескрипторов для обработки Вызывать данную функцию обязана только передающая сторона. При этом вызов данной функции не влияет на входящий аудиопоток и его обработку |
функция | параметры |
SetINVISTParam | Синтаксис:
void SetINVISTParam (Handle hConn,
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection hDC - виртуальній или физический hDC источника изображения на стороне сервиса или DC для отрисовки на стороне клиента rightX - координата Х левого верхнего угла прямоугольника-источника (относительно окна) topY - координата Y левого верхнего угла прямоугольника-источника (относительно окна) widthX - ширина прямоугольника-источника (относительно окна) heightY - высота прямоугольника-источника (относительно окна) INVStat - зарезервировано Функция устанавливает начальные параметры видеопотока. Данную функцию следует вызывать на стороне сервера до того как придет запрос на видеотрансляцию. на стороне клиента вызов данной функции не является обязательным |
функция | параметры |
CreateINPRT | Синтаксис:
void CreateINPRT(Handle hConn, int posX, int POSY, int widthX, int heightY, DWORD styleWin, HWND hParent, LPDWORD lpWin, int LCount, CBSTATUS WMClose);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection posX - The initial horizontal position of the window. For an overlapped or pop-up window, the x parameter is the initial x-coordinate of the window's upper-left corner, in screen coordinates. For a child window, x is the x-coordinate of the upper-left corner of the window relative to the upper-left corner of the parent window's client area. If x is set to CW_USEDEFAULT, the system selects the default position for the window's upper-left corner and ignores the y parameter. CW_USEDEFAULT is valid only for overlapped windows; if it is specified for a pop-up or child window, the x and y parameters are set to zero. posY - The initial vertical position of the window. For an overlapped or pop-up window, the y parameter is the initial y-coordinate of the window's upper-left corner, in screen coordinates. For a child window, y is the initial y-coordinate of the upper-left corner of the child window relative to the upper-left corner of the parent window's client area. For a list box y is the initial y-coordinate of the upper-left corner of the list box's client area relative to the upper-left corner of the parent window's client area. If an overlapped window is created with the WS_VISIBLE style bit set and the x parameter is set to CW_USEDEFAULT, then the y parameter determines how the window is shown. If the y parameter is CW_USEDEFAULT, then the window manager calls ShowWindow with the SW_SHOW flag after the window has been created. If the y parameter is some other value, then the window manager calls ShowWindow with that value as the nCmdShow parameter. widthX - The width, in device units, of the window. For overlapped windows, nWidth is the window's width, in screen coordinates, or CW_USEDEFAULT. If nWidth is CW_USEDEFAULT, the system selects a default width and height for the window; the default width extends from the initial x-coordinates to the right edge of the screen; the default height extends from the initial y-coordinate to the top of the icon area. CW_USEDEFAULT is valid only for overlapped windows; if CW_USEDEFAULT is specified for a pop-up or child window, the nWidth and nHeight parameter are set to zero. heightY - The height, in device units, of the window. For overlapped windows, nHeight is the window's height, in screen coordinates. If the nWidth parameter is set to CW_USEDEFAULT, the system ignores nHeight. styleWin - стиль окна. более детально о стилях hParent - A handle to the parent or owner window of the window being created. To create a child window or an owned window, supply a valid window handle. This parameter is optional for pop-up windows. To create a message-only window, supply HWND_MESSAGE or a handle to an existing message-only window. lpWin - адресс переменной которая получит значение Handle окна плейера LCount - условное разделение на горизонтальные блоки. может принимать значения от 1 до 15 WMClose -указатель на функцию которая получит дубликат сообщения WM_CLOSE для окна плейера Функция должна вызываться на стороне клиента. Согласует параметры передачи видеопотока с сервером с которым должно быть предварительно установлено соединение. создает окно интерактивного проигрывателя и отображает видеопоток в реальном времени |
функция | параметры |
StartRemoteINVIST | Синтаксис:
void StartRemoteINVIST (Handle hConn,
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection hDC - виртуальный или физический DC для отрисовки на стороне клиента rightX - координата Х левого верхнего угла прямоугольника-источника (относительно окна) topY - координата Y левого верхнего угла прямоугольника-источника (относительно окна) widthX - ширина прямоугольника-источника (относительно окна) heightY - высота прямоугольника-источника (относительно окна) LCount - условное разделение на горизонтальные блоки. может принимать значения от 1 до 15 Функция подготавливает окружение на стороне сервера и стороне клиента для трансляции покадрового потока с сервера клиенту. Функция вызывается клиентом |
функция | параметры |
GetBMPAddr | Синтаксис:
LPDWORD GetBMPAddr (Handle hConn);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection возвращает указатель на массив данных с битовыми данными растрового изображения |
функция | параметры |
GetRemoteINVISTService | Синтаксис:
void GetRemoteINVISTService (Handle hConn);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection. Функция получает следующий кадр с сервера и отрисовывает его на DC указанном при вызове StartRemoteINVIST. |
функция | параметры |
StopRemoteINVIST | Синтаксис:
void StopRemoteINVIST(Handle hConn);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection прекращает видеопоток и освобождает память занятую для видеопотока на стороне сервера и на стороне клиента |
функция | параметры |
IONMouseVScroll | Синтаксис:
void IONMouseVScroll(Handle hConn, DWORD UpDown);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection UpDown в случае -1 прокручивает вверх, в противоположном случае - вниз имитация вертикальной прокрутки колесом мыши |
функция | параметры |
IONLMouseDown | Синтаксис:
void IONLMouseDown(Handle hConn, DWORD ScrX, DWORD ScrY );
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection ScrX - абсолютная относительная координата удаленного экрана Х ScrX - абсолютная относительная координата удаленного экрана Y Имитация нажатия левой кнопки мыши. |
функция | параметры |
IONRMouseDown | Синтаксис:
void IONRMouseDown(Handle hConn, DWORD ScrX, DWORD ScrY );
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection ScrX - абсолютная относительная координата удаленного экрана Х ScrX - абсолютная относительная координата удаленного экрана Y Имитация нажатия правой кнопки мыши. |
функция | параметры |
IONLMouseUp | Синтаксис:
void IONLMouseUp(Handle hConn, DWORD ScrX, DWORD ScrY );
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection ScrX - абсолютная относительная координата удаленного экрана Х ScrX - абсолютная относительная координата удаленного экрана Y имитация нажатия левой кнопки мыши |
функция | параметры |
IONRMouseUp | Синтаксис:
void IONRMouseUp(Handle hConn, DWORD ScrX, DWORD ScrY );
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection ScrX - абсолютная относительная координата удаленного экрана Х ScrX - абсолютная относительная координата удаленного экрана Y имитация нажатия правой кнопки мыши |
функция | параметры |
IONMouseMove | Синтаксис:
void IONMouseMove(Handle hConn, DWORD ScrX, DWORD ScrY , int StepMove);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection ScrX - абсолютная относительная координата удаленного экрана Х ScrX - абсолютная относительная координата удаленного экрана Y StepMove - зарезервировано имитация перемещения указателя мыши в заданную позицию |
функция | параметры |
IONKeyDown | Синтаксис:
void IONKeyDown(Handle hConn, DWORD VKey);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection VKey virtual key-code нажатой кнопки имитация нажатия кнопки клавиатуры |
функция | параметры |
IONKeyUp | Синтаксис:
void IONKeyUp(Handle hConn, DWORD VKey);
hConn - дескриптор полученый функцией CreateIONHandle или IONWaitConnection VKey virtual key-code нажатой кнопки Имитация отпускания кнопки клавиатуры |
функция | параметры |
StartHiddenConsoleProcess | Синтаксис:
void StartHiddenConsoleProcess(LPVOID pCMDLine, PHANDLE pOutPipe, PHANDLE pInPipe, PHANDLE pCOutPipe, PHANDLE pCInPipe);
pCMDLine - указатель на ASCIIZ (заканчивающуюся нулем) строку с именем запускаемого консольного приложения pOutPipe указатель на переменную которая получит хендл пайпа для вывода pInPipe указатель на переменную которая получит хендл пайпа для ввода pСOutPipe указатель на переменную которая получит хендл пайпа для вывода на стороне консоли pСInPipe указатель на переменную которая получит хендл пайпа для ввода на стороне консоли |
функция | параметры |
SendCommandLine | Синтаксис:
void SendCommandLine(HANDLE hOutpipe, LPVOID pCOMCline);
hOutpipe - хендл пайпа для вывода, который вернула функция StartHiddenConsoleProcess pCOMCline указатель на коммандную строку, заканчивающуюся тремя символами 0x0D, 0x0A, 0x00 |
функция | параметры |
SaveINVISTtoBPM | Синтаксис:
int SaveINVISTtoBPM(HANDLE hConn, LPVOID pFName);
hConn - хендл полученный функцией CreateIONHandle pFName ASCIIZ строка содержащая имя bmp файла |
// обмен файлами почти неограниченного размера между клиентами за NAT
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\WORK\\P2P\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\WORK\P2P\HEREDES\heredes.h>
int main(void)
{
InitIONLibrary(); // инициализация библиотек и интерфейсов HEREDES
DWORD Valid = 0;
DWORD Id = 0;
DWORD HightDword = 0;
RegIONId(&Valid, &Id); // регистрация нового пользователя
// запуск асинхроннго сервера для ожидания входящих соединений
HANDLE hConn = IONWaitConnection(&Valid, &Id, NULL);
// запуск синхронного интерфейса для передачи файла
DWORD lowDword = IONSendFileToId(&Valid, &Id, NULL, &HightDword);
IONTerminate(hConn); // прерывание ожидания входящих соединений
CloseIONHandle(hConn);
return 0;
}
Скачать скомпилированный пример 1
//UDP сервер, который в течении минуты слушает сеть и ожидает входящих соединений
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
int main(void)
{
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
DWORD Valid = 0;
DWORD Id = 0;
DWORD HightDword = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
//запуск асинхроннго сервера для ожидания входящих соединений
HANDLE hConn = IONWaitConnection(&Valid, &Id, NULL);
HANDLE hEv=CreateEventA(NULL,1,NULL,NULL);
WaitForSingleObject(hEv,60000);
CloseHandle(hEv);
IONTerminate(hConn); //прерывание ожидания входящих соединений
CloseIONHandlw(hConn); //прерывание ожидания входящих соединений
return 0;
}
//простейший UDP клиент, который ничего не делает
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
int main(void)
{
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
HANDLE hConn;
RegIONId(&Valid, &Id); //регистрация нового пользователя
hConn=CreateIONHandle();
if (IONConnectToId(hConn, NULL, &Valid, &Id, &SecKey, NULL, NULL, NULL)==TRUE){
MessageBoxA(NULL,"коннет установлен","состояние подключения", 48);
HANDLE hEv=CreateEventA(NULL,1,NULL,NULL);
WaitForSingleObject(hEv,60000);
CloseHandle(hEv);
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
IONDisconnect(hConn); //прерывание ожидания входящих соединений
CloseIONHandle(hConn); //прерывание ожидания входящих соединений
return 0;
}
//клиент-сервер over NAT
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
int main(void)
{
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
HANDLE hCON_IN=IONWaitConnection(&Valid, &Id, NULL);
HANDLE hCON_OUT=CreateIONHandle();
if (IONConnectToId(hCON_OUT, NULL, &Valid, &Id, &SecKey, NULL, NULL, NULL==TRUE)){
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
IONTerminate(hCON_IN);
IONDisconnect(hCON_OUT);
CloseIONHandle(hCON_IN);
CloseIONHandle(hCON_OUT);
FreeConsole();
return 0;
}
//написать за NAT
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
HANDLE hOutput;
CBUDATA __stdcall UserDataProc(HANDLE hConn, LPVOID pAddrUserData, int datSize)
{
DWORD inSize;
WriteConsoleA(hOutput,pAddrUserData, datSize, &inSize, NULL);
return 0;
}
int main(void)
{
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
CHAR buffer[0x3E0]; //максимальный размер блока пользовательских данных 0х3Е0
DWORD bSize=0;
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
AllocConsole();
HANDLE hInput=GetStdHandle(-10);
hOutput=GetStdHandle(-11);
HANDLE hCON_IN=IONWaitConnection(&Valid, &Id, (CBUDATA) &UserDataProc);
HANDLE hCON_OUT=CreateIONHandle();
if (IONConnectToId(hCON_OUT, NULL, &Valid, &Id, &SecKey, \
NULL, NULL, (CBUDATA) &UserDataProc)==TRUE){
while (bSize!=-1){
ReadConsoleA(hInput,&buffer,0x3E0,&bSize,NULL);
if (IONGetStatus(hCON_OUT)==6) {SendUserData(hCON_OUT,&buffer,bSize);};
if (IONGetStatus(hCON_IN)==6) {SendUserData(hCON_IN,&buffer,bSize);};
}
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
IONTerminate(hCON_IN);
IONDisconnect(hCON_OUT);
CloseIONHandle(hCON_IN);
CloseIONHandle(hCON_OUT);
FreeConsole();
return 0;
}
Скачать скомпилированный пример 4
Пример 5. Простая звоника за NAT
//поговорить за NAT
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
int main(void)
{
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
HANDLE hCON_IN=IONWaitConnection(&Valid, &Id, NULL);
HANDLE hCON_OUT=CreateIONHandle();
IONSetAudioParam(hCON_OUT,3,"aud_in.wav","aud_sp.wav",NULL);
IONSetAudioParam(hCON_IN,3,"aud_in.wav","aud_sp.wav",NULL);
if (IONConnectToId(hCON_OUT, NULL, &Valid, &Id, &SecKey, NULL, NULL, NULL)==TRUE){
IONStartAudioStream(hCON_OUT,11025);
HANDLE hEv=CreateEventA(NULL,1,NULL,NULL);
WaitForSingleObject(hEv,60000);
CloseHandle(hEv);
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
IONStopAudioStream(hCON_IN);
IONStopAudioStream(hCON_OUT);
IONTerminate(hCON_IN);
IONDisconnect(hCON_OUT);
CloseIONHandle(hCON_IN);
CloseIONHandle(hCON_OUT);
return 0;
}
Скачать скомпилированный пример 5
//CMD за NAT
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
CHAR buffer[0x3E0]; //максимальный размер блока пользовательских данных 0х3Е0
HANDLE hOutput;
HANDLE outpipe;
HANDLE inpipe;
HANDLE hEv;
HANDLE hCON_IN;
HANDLE hCON_OUT;
CBUDATA __stdcall UserDataProc(HANDLE hConn, LPVOID pAddrUserData, int datSize)
{
DWORD cRcv=1;
if (IONGetStatus(hCON_IN)==6){
SendCommandLine(outpipe,pAddrUserData);
WaitForSingleObject(hEv,2000);
while(cRcv!=0){
PeekNamedPipe(inpipe,NULL,NULL,NULL,&cRcv,NULL);
if (cRcv!=0){
ReadFile(inpipe,&buffer,cRcv,&cRcv,NULL);
}
SendUserData(hCON_IN,&buffer,cRcv);
}
};
if (IONGetStatus(hCON_OUT)==6){
WriteConsoleA(hOutput,pAddrUserData,datSize,&cRcv,NULL);
};
DWORD inSize;
WriteConsoleA(hOutput,pAddrUserData, datSize, &inSize, NULL);
return 0;
}
int main(void)
{
HANDLE hInCons;
HANDLE hOutCons;
hEv=CreateEventA(NULL,1,NULL,NULL);
StartHiddenConsoleProcess("cmd.exe",&outpipe, &inpipe, &hOutCons, &hInCons);
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
DWORD bSize=0;
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
hCON_IN=IONWaitConnection(&Valid, &Id, (CBUDATA) &UserDataProc);
hCON_OUT=CreateIONHandle();
if (IONConnectToId(hCON_OUT, NULL, &Valid, &Id, &SecKey, \
NULL, NULL, (CBUDATA) &UserDataProc)==TRUE){
AllocConsole();
HANDLE hInput=GetStdHandle(-10);
hOutput=GetStdHandle(-11);
WriteConsoleA(hOutput,"REMOTE CMD >",12,&bSize,NULL);
while (bSize!=-1){
ReadConsoleA(hInput,&buffer,0x3E0,&bSize,NULL);
SendUserData(hCON_OUT,&buffer,bSize);
}
FreeConsole();
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
IONTerminate(hCON_IN);
IONDisconnect(hCON_OUT);
CloseIONHandle(hCON_IN);
CloseIONHandle(hCON_OUT);
return 0;
}
Скачать скомпилированный пример 6
//безголовый скрин
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
int main(void)
{
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
HDC hCDC;
HDC hDC=GetDC(NULL);
HANDLE hCON_IN=IONWaitConnection(&Valid, &Id, NULL);
HANDLE hCON_OUT=CreateIONHandle();
SetINVISTParam(hCON_IN,hDC,64, 64, 256, 256,NULL);//установим параметры прямоугольника
//разрешенного для отправки по сети
if (IONConnectToId(hCON_OUT, NULL, &Valid, &Id, &SecKey, NULL, NULL, NULL)==TRUE)
{
hCDC=CreateCompatibleDC(hDC);
StartRemoteINVIST(hCON_OUT,hCDC,512, 512, 1); //размеры изображения
//я решил увеличить,
//но можно было оставить и оригинальные или напротив уменьшить
for (int i=0; i<3; i++){GetRemoteINVISTService(hCON_OUT);}; //получаю видео из 3х кадра
//из за специфики кодека
int sB=SaveINVISTtoBPM(hCON_OUT,"screen.bmp");
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
DeleteDC(hCDC);
IONTerminate(hCON_IN);
IONDisconnect(hCON_OUT);
CloseIONHandle(hCON_IN);
CloseIONHandle(hCON_OUT);
return 0;
}
Скачать скомпилированный пример 7
//свой маленький TeamViewer
#pragma comment(linker, "/SUBSYSTEM:windows /ENTRY:mainCRTStartup")
#pragma comment(lib, "C:\\HEREDES\\heredes.lib")
#include <windows.h>
#include <C:\HEREDES\heredes.h>
HANDLE hEv;
WNDPROC __stdcall ProcClose(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
SetEvent(hEv);
return 0;
}
int main(void)
{
hEv=CreateEventA(NULL,1,NULL,NULL);
InitIONLibrary(); //инициализация библиотек и интерфейсов HEREDES
CHAR SecKey[8]; //8-ми байтный массив с ключем шифрования
DWORD Valid = 0;
DWORD Id = 0;
RegIONId(&Valid, &Id); //регистрация нового пользователя
HDC hCDC;
HDC hDC=GetDC(NULL);
HANDLE hCON_IN=IONWaitConnection(&Valid, &Id, NULL);
HANDLE hCON_OUT=CreateIONHandle();
SetINVISTParam(hCON_IN,hDC,64, 64, GetSystemMetrics(0), GetSystemMetrics(1),NULL); //установим параметры прямоугольника
if (IONConnectToId(hCON_OUT, NULL, &Valid, &Id, &SecKey, NULL, NULL, NULL)==TRUE)
{
hCDC=CreateCompatibleDC(hDC);
StartRemoteINVIST(hCON_OUT,hCDC,512, 512, 1); //размеры изображения я решил увеличить,
//но можно было оставить и оригинальные или напротив уменьшить
HWND hWin;
CreateINPRT(hCON_OUT, 64, 32, 512, 300, 0x00CF0000, NULL, &hWin, 1, (WNDPROC) ProcClose);
WaitForSingleObject(hEv,-1);
}else{
MessageBoxA(NULL,"ошибка соединения","состояние подключения", 48);
};
CloseHandle(hEv);
IONTerminate(hCON_IN);
IONDisconnect(hCON_OUT);
CloseIONHandle(hCON_IN);
CloseIONHandle(hCON_OUT);
return 0;
}
Скачать скомпилированный пример 8