On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение





ссылка на сообщение  Отправлено: 02.02.19 00:01. Заголовок: Ламерские вопросы по работе c Simpl#


Который раз пытаюсь начать работать с Simpl# но никак мне эта тема не дается.
Сразу оговорюсь, опыт пока 0%. Прошу учесть в ответе.
Решил вот начать не с написания своего модуля в VS, а для начала воспользоваться готовыми функциями библиотек или классов уж не знаю как правильно Crestron.SimplSharp (те которые как то мало понятно описаны по этой ссылке)
На это натолкнула конструкция из хелпа:
#CRESTRON_SIMPLSHARP_LIBRARY "LibraryName" - for referencing a SIMPL# Library provided by Crestron
Я так понял, что используя эту конструкцию я могу подтянуть в программу simpl+ стандартную библиотеку SIMPL# и воспользоваться как то её функцией. Это так?
Не совсем понятно что нужно в качестве "LibraryName" написать ? Пробовал названия классов из первой ссылки, компилятор посылает за файлом *.clz

Подскажите пожалуйста, что не так. Неужели обязательно писать прокладку на VS чтоб получить clz? (зачем тогда такая конструкция заявлена, оставили бы только #USER_SIMPLSHARP_LIBRARY) Да и что я там должен публиковать, функции из стандартного класса?
Если можно на примере любого стандартного класса реализующего любую понятную функцию объясните плиз. Хотел в общем то функционал https (Сервер или клиент если сервера нет) использовать

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 19 [только новые]





ссылка на сообщение  Отправлено: 02.02.19 15:38. Заголовок: Вячеслав пишет: (з..


Вячеслав пишет:

 цитата:
(зачем тогда такая конструкция заявлена, оставили бы только #USER_SIMPLSHARP_LIBRARY)


#CRESTRON_SIMPLSHARP_LIBRARY это крестроновские библеотеки которые берутся из Database (crssplus.dat) для крестроновских же модулей csp (вринципе в ней же).

Вячеслав пишет:

 цитата:
Я так понял, что используя эту конструкцию я могу подтянуть в программу simpl+ стандартную библиотеку SIMPL# и воспользоваться как то её функцией. Это так?


нет. оно ничего не имеет общего с "готовыми функциями библиотек" Crestron.SimplSharp

Вячеслав пишет:

 цитата:
Подскажите пожалуйста, что не так. Неужели обязательно писать прокладку на VS чтоб получить clz?


для clz только VS! только 2008! только с крестроновским sandbox'м (Crestron_Simpl_Sharp_Pro_x.xxx.xxx.xx.exe)

clz генерирует крестроновский sandbox. это тупо zip архив с вашим .dll + библиотеки на которые он завязан.
при компиляции он проверяет на разрешенные в песочнице классы, если всё хорошо: компилирует, сигнатурит, колдует, зипует.

Вячеслав пишет:

 цитата:
Не совсем понятно что нужно в качестве "LibraryName" написать ?



#USER_SIMPLSHARP_LIBRARY LibraryName
где LibraryName это полное название LibraryName.clz без разширения, путь если файл лежит в папке проекта ненужен, только название.



 цитата:

#USER_SIMPLSHARP_LIBRARY "CP1251toUnicode"
STRING_INPUT In_Unicode[255];
STRING_OUTPUT Out_CP1251;

THREADSAFE Change In_Unicode
{
Out_CP1251 = StringEncode.UnicodeStringToCP1251String(In_Unicode);
}



CP1251toUnicode.clz

 цитата:
using System;
using System.Linq;
using System.Text;
using Crestron.SimplSharp; // For Basic SIMPL# Classes

namespace CP1251toUnicode
{
public static class StringEncode
{
// Пару других классов
public static string UnicodeStringToCP1251String(SimplSharpString UnicodeString)
{
byte[] b = UnicodeStringToCP1251ByteArray(UnicodeString.ToString());
return iso.GetString(b, 0, b.Length);
}
// Пару других классов
}
}



P.S. До TCP сервера/клиента, ознакомьтесь с базовым функционалом ;)

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 02.02.19 18:56. Заголовок: Спасибо DmitriiP. ..


Спасибо DmitriiP.

Правда я так и не понял, для чего же #CRESTRON_SIMPLSHARP_LIBRARY
Смущает что в crssplus.dat нет ни одного файла с расширением clz. Думал крестрон туда ломится просто перебирая все возможные места нахождения файла clz.

byte[] b = UnicodeStringToCP1251ByteArray(UnicodeString.ToString()); Конструкция для понимания пока просто жестока (( Особенно её часть UnicodeString.ToString() Вроде была параметрическая переменная, а используется как метод класса
return iso.GetString(b, 0, b.Length); тоже та еще конструкция. Я бы не догадался ничего кроме return b написать ((
Видимо надо справочник по c# листать.

У меня при создании программы в VS почему то много подклассов заявленных Crestron.SimplSharpPro.... просто не выдает в подстановке. У меня что какой то не полный пакет SimplSharpPro ?


Еще расстроился по поводу отсутствия HTTPS сервера, или он есть и доступен в базовых классах не от Crestron?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 02.02.19 22:20. Заголовок: 1) В crssplus.dat ок..


1) В crssplus.dat около 40 "ненужных вам" clz например amfmtuner, приглядитесь ;)
2) с UnicodeString.ToString() забейте это просто потому что на входе SimplSharpString а не простой String (работает и без этого, но я добавил) ;)
3) return iso.GetString(b, 0, b.Length); это тупо возврат байтового массива в полной 00-FF ASCII кодировке, iso определено в другом месте
// Пару других классов
4) После создания нового Simpl#, сохраните, закройте студию, откройте по новому
System не должно и не будет красным
5) SimplSharpPro для SimplSharpPro программ +библиотек под них, с Simpl+ совместим только SimplSharp

P.S. На счёт HTTPS щас не скажу, клиент точно есть

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 03.02.19 08:56. Заголовок: Что именно вы доразу..


Что именно вы подразумеваете под HTTPS сервером?
HTTP сервер есть в системе как класс (IIS 6.0) и он же HTTPS если включем режим "SSL SELF" или "SSL CA" (ибо серверу требуется сертификат)
Для программирования динамических страниц или веб-сервисов есть CWS (Crestron Web Scripting) - очень похож на ASP.NET в базовых классах.

Другой способ это самому обрабатывать HTTP запросы в том числе и через SSL/TLS - Crestron.SimplSharp.CrestronSockets.SecureTCPServer

Будут конкретные вопросы, обращайтесь! ))

P.S. А вообще, лучше дождаться 4-й серии где, похоже, можно будет выйти из песочницы и делать все, что душе угодно из того, что умеет моно включая нормальный asp.net

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 05.02.19 16:21. Заголовок: 1.Поясните, как обра..


1.Поясните, как обратиться к классу IIS 6.0 в программе VS?
2.Как включить упомянутые режимы "SSL SELF" или "SSL CA"?
3.Если использовать сертификат, то его можно будет разметить во внутренней флэш контроллера? OpenSSL вроде формирует сертификат и ключ. С ключом пока не понял, вроде должно 2 быть приватный и публичный, хотя эта достойна отдельного обсуждения, но без нее может и все труды напрасны.

4.(Crestron.SimplSharp.CrestronSockets.SecureTCPServer)Где же описание этого класса?

Я так понимаю суслик есть но его не видно ))
5.Описание по Simpl# существует более подробное и полное чем по ссылке в 1 посте? Сами какой литературой пользуетесь для поиска нужного инструментария?
6.Где найти описание Crestron Web Scripting (в поисковике лишь упомянут скромной фразой, что его можно использовать в simpl#)?

Как думаете HTTPS клиент (не самописный) пошлет куда подальше не получив данные по сертификату, если обрабатывать средствами Crestron.SimplSharp.CrestronSockets.SecureTCPServer?
Мне пока и песочница - пустыня, только начинаю вникать в c#. Хотелось вот мотивировать себя нужным примером реализации обмена с HTTPS клиентом.

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 05.02.19 20:33. Заголовок: 1. Я прошу прощения ..


1. Я прошу прощения насчет "класса". Это была фигура речи! )) IIS, конечно же, присутствует там в виде вервиса как обычно. Обратиться к нему напрямую из песочницы не получится... Можно разве что статические странички положить в HTML фолдер.
2. "SSL" это - консольная команда. Консоль это - либо тулбокс, либо SSH. У тулбокса наверняка есть и визуальный интерфейс ко всему этому, но я им практически не пользуюсь тем более, что в результате все это делается через те же консольные команды: набираете "SSL ?" и получаете краткую справку как и что. У Крестрона где-то есть документ по поводу секьюрити, где все это описано. Попробую найти как-нибудь. SSL SELF - самое простое, но бестолковое в смысле безопасности т.к. серфикат будет self-signed. Шифрование есть, а аутентификации сервера нет так, что кто-то может влезть между вами... :) SSL CA это уже по-взрослому. Сертификат настоящий и должен быть подписан CA (либо сторонним, либо вашим собственным). Для генерации самого сертификата и запроса на подпись есть команда "CreateCSR", но можно и свой готовый серт подсунуть системе...
3. Все правильно. OpenSSL может сделать все сам:
- сгенерировать ваш сертификат
- сгенерировать, если нужно, ваш собственный CA
- подписать ваш сертификат приватным ключем CA
- альтернативно последнему, вы можете отправить запрос на подпись своего сертификата стороннему CA (обычно за деньги)
Команда CreateCSR предназначена заменить первый пункт выше, но вы можете "подсунуть" и готовый сертификат с приватным ключем системе в виде файлов.
В любом случае все заканчивается командой "SSL CA" и сертификат хранится во внутреннем флеше, конечно же.
Ваш сертификат это и есть ваш публичный ключ плюс всякие мета-данные подписанный приватным ключем CA. Приватный же ключ вашего сертификата в виде отдельного файла ханится в защищенном месте и/или в зашифрованном паролем виде. В случае CreateCSR команды, вы его никогда и не увидете. Есть вариант pfx файла, когда серт и его приватный ключ в одном и том же файле, но тогда последний, как правило, шифруется паролем.
4. Думаю вам стоит обновить include4.dat если вы понимаете о чем я... иными словами у вас похоже устаревший SDK. Суслик точно есть и я его вижу у себя... ))
5. Сложный вопрос. Возможно старшие товарищи помогут с литературой, ибо я никогда ничем не пользовался... чисто C#, XML-документация самих классов и common sense (как говорят наши заклятые друзья американцы).
6. Такая же ситуация и CWS. Я вообще не уверен, что описание как таковое существует. Здесь поможет знание основ ASP.NET ибо если посмотрите на базовые классы CWS, то они напоминают сильно урезанный ASP.NET. Проще разбираться на примерах. В сети где-то есть пример S# программы для CWS. Могу и я выложить куда-нибудь...

Кто такой HTTPS клиент? Типа обычный браузер? Не пошлет, но спросит что делать... ) HTTPS сервиса (а точнее SSL/TLS соединения) без сертификата не бывает. Другое дело, что сертификат у сервера может быть "левый". Программым способом (пользуя тот же libCURL) это всегда можно игнорировать. Браузер же всегда можно "уговорить", что данный сертификат является "хорошим"... ))

Вам точно нужен HTTP протокол-то? Однако если речь идет о веб-сервисах, например, то лучше все-таки смотреть в сторону CWS.

Спасибо: 1 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 06.02.19 02:39. Заголовок: olegny пишет: обнов..


olegny пишет:

 цитата:
обновить include4.dat если вы понимаете о чем я

Нет не понимаю. Скриншот описания классов сделан по упомянутой ссылке на сайте crestron click here. Никого локально описания, которое я мог бы обновить у меня пока нет. В хэлпе на SimplWindows я даже не подумал искать описание simpl#.
VS отзывается на класс Crestron.SimplSharp.CrestronSockets.SecureTCPServer но команды придется выбирать по наитию. А хотелось бы описания, желательно с примерами кода. Потому что будет наверняка не все очевидно.


 цитата:
посмотрите на базовые классы CWS

Посмотреть где? )

Класс Crestron.SimplSharp.CrestronSockets.SecureTCPServer поддерживает команды управления сертификатами тоже?

Еще раз спасибо за развернутый ответ

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 06.02.19 04:30. Заголовок: Судя по всему они не..


Судя по всему они не слишком торопятся обновлять свой онлайн хелп... )

Сразу оговорюсь, что с Simpl+ я работал мало и очень давно так, что как расширять оную функциональность с помощью S# знаю только теоретически. Но в теории да, пишете свои классы-обертки на S# с интерфейсом и функциональностью, необходимыми вашему S+ модулю.

Здесь и далее речь идет о проекте "Simpl# Library" в VS 2008 с плагином SIMPL# от Крестрона. Как вариант можно играться в чистой SIMPL# Pro программе, чтобы не связываться с S+, а запускать ее как отдельно-стоящий app.

Под "командами" класса видимо нужно понимать его методы? А там есть еще свойства и прочее...
Когда вы объявляете переменную этого типа (класса), а потом собираетесь с ней что-то делать и ставите точку после имени, разве не вываливается весь список методов и свойств? Ну или кликните правой кнопкой на само имя (SecureTCPServer) класса и сходите в "Definition" - там все есть!

Насчет CWS: в references вашего проекта надо добавить SimplSharpCWSHelperInterface и потом открыть его (правой кнопкой) в Object Browser.

У SecureTCPServer есть метод SetServerCertificate и SetServerPrivateKey. Больше ничего особо и не надо...

Спасибо: 1 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 24.03.19 02:08. Заголовок: Что то я не понимаю ..


Что то я не понимаю как в методе SetServerCertificate подтянуть уже готовый сертификат не говоря уж про его генерацию, тот же вопрос по методу SetServerPrivateKey

Error 1 The best overloaded method match for 'Crestron.SimplSharp.CrestronSockets.SecureTCPServer.SetServerCertificate(Crestron.SimplSharp.Cryptography.X509Certificates.X509Certificate)' has some invalid arguments
Error 2 The best overloaded method match for 'Crestron.SimplSharp.CrestronSockets.SecureTCPServer.SetServerPrivateKey(byte[])' has some invalid arguments

public class SSLserver
{

SecureTCPServer SecureServer = new SecureTCPServer();


public SSLserver()
{
SecureServer.SetServerPrivateKey(???);
SecureServer.SetServerCertificate(???);


}
}
Без примеров беда просто

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 28.03.19 07:40. Заголовок: Да уж... с примерами..


Да уж... с примерами у них туговато, но поскольку все очень похоже на обычный .NET, то все можно вытащить из MSDN.

К примеру, параметр типа X509Certificate это объект класса с конструктором из того же массива байтов, которые есть не что иное как сертификат в ASN.1/DER формате, который, в свою очередь - простой декодинг base64 строки из PEM фотмата, который можно сгенерить с помощью OpenSSL утилиты вместе с приватным ключем в таком же формате для SetServerPrivateKey.

Проблема в том, что это скорее всего будет self-signed сертификат или с "самопальным" CA, что может вызвать проблему на стороне клиента, но все решаемо... ))

Задавайте вопросы конкретные и последовательно, а то трудно писать тут целые лекции... ;)

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 28.03.19 11:42. Заголовок: 1.Да вот я и пытаюсь..


1.Да вот я и пытаюсь конкретные. Как из файла на NVRAM подтянуть сертификат и ключ и подставить в описанные функции? Генерация была бы тоже интересна, но ее по моему не предусмотрели.
У меня например файлы в формате *.pem (cert.pem key.pem) сгенерированные утилитой OpenSSL. Т.е. получается надо еще декодить из base64
Пытаюсь использовать
string strKey = File.ReadToEnd("\\NVRAM\\key.pem", Encoding.ASCII);
string strCert = File.ReadToEnd("\\NVRAM\\cert.pem", Encoding.ASCII);
Но как потом к формату параметров
SecureServer.SetServerPrivateKey(???);
SecureServer.SetServerCertificate(???);
привести не знаю.

Работа с файлами в simpl# описана тоже никак. По описанию функций вообще не понять какой открывать можно двоичный файл.
2.А сервис понятный есть для транзита HTTPS в HTTP, так чтобы в текущей сессии можно было отвечать. Направили на IFTTT, но там просто триггеры типа Webhook не предусматривающий ответов (

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 28.03.19 17:30. Заголовок: 1.Ну уже легче, но в..


1.Ну уже легче, но все равно есть неопределенности: эти pem файлы с паролем (зашифрованные) или нет?
Если нет, то все просто:
Из строки, в которую вы считали ваши файлы, убираете строки типа ----- ... -----, оставшуюся часть деокодите из base64 и скармливаете её x509 классу.
Вот пример декодирования:
byte[] GetBytesFromPEM(string pemString, string section)
{
var header = String.Format("-----BEGIN {0}-----", section);
var footer = String.Format("-----END {0}-----", section);

var start = pemString.IndexOf(header, StringComparison.Ordinal) + header.Length;
var end = pemString.IndexOf(footer, start, StringComparison.Ordinal) - start;

if (start < 0 || end < 0)
{
return null;
}

return Convert.FromBase64String(pemString.Substring(start, end));
}

То же самое делаете с private key, только подсовываете получивщиеся байты непосредственно SetServerPrivateKey методу.

Вообще, получить DER файлы можно заранее с помощью того же OpenSSL и считывать их сразу в byte[].
Описание работы с файлами не требуется просто по той причине, что нужно знать обычный C#: FileStream -> Read или BinaryReader

2. Ничего не понял... Какого еще транзита? Что нужно делать?

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 31.03.19 00:19. Заголовок: Чем дальше в лес тем..


Чем дальше в лес тем больше функций. Что ж так все сложно то.
1. Я так понимаю GetBytesFromPEM(string pemString, string section) это функция типа byte[], которая делает какие то преобразования (видимо убирает? строки типа ----- ... -----) со строкой переданной через параметр pemStrig?
2. В параметр pemString видимо нужно подставить переменную strKey полученную из файла. Что за параметр section ? что я должен туда подставить?
в итоге выполнив метод
SecureServer.SetServerPrivateKey(GetBytesFromPEM(strKey,???)); //где ??? некий section
но
SecureServer.SetServerCertificate(???); по прежнему хочет переменную типа X509Certificate и функцию GetBytesFromPEM с форматом byte[] ему не скормить.

Про транзит это была идея не вникать в тонкости шифрования, а воспользоваться "готовым" инструментом у которого на выходе расшифрованные данные . Предположим клиент по https отправляет некие шифрованные данные на сервер https (организованный на каком то интернет сервисе с правильными выданными удостоверяющим центром сертификатами), сервис пересылает полученные данные мне на crestron, я их обрабатываю и в пределах этой сессии хочу отправить ответ клиенту по обратному пути (который только в пределах этой сессии и существует). Сервер-сервис получает от Crestron ответ, шифрует его и передает клиенту отправившему запрос.

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 01.04.19 05:07. Заголовок: Ну, так не пойдет.....


Ну, так не пойдет... ))
У вас уровень уж совсем какой-то "ламерский" и не столько в Simpl#, сколько в программировании на C# (или в программировании вообще?)
Эдак мне придется за вас тут весь код написать! ;)

1. Я же привел исходный код этой функции выше! Как можно после этого употреблять слова типа "видимо", "какие-то"? ))
2. Вы когда-нибудь открывали ваш PEM файл в текстовом редакторе? Если бы открыли, то увидели, что в вашем случае параметр section это "CERTIFICATE" потому, что строки выглядят как:
-----BEGIN CERTIFICATE----- и -----END CERTIFICATE-----
И это был только _пример_ подобной функции, а вы можете сделать все по-своему, ибо самое главное там в конце: Convert.FromBase64String()

Как только вы получите byte[] своего сертификата, вы должны скормить его конструктору X509Certificate класса, т.е. в результате все это может выглядеть типа такого:

SecureServer.SetServerCertificate(new X509Certificate(GetBytesFromPEM(strCert, "CERTIFICATE")))
SecureServer.SetServerPrivateKey(GetBytesFromPEM(strKey, "<посмотрите что у вас там в PEM файле! :-)>"

Насчет транзита... даже не хочу комментировать! )) Это может иметь смысл разве что внутри вашей LAN, но и то в общем случае не рекомендуюется.

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 01.04.19 21:14. Заголовок: Спасибо, за пояснени..


Спасибо, за пояснения.

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 02.04.19 05:46. Заголовок: Да не за что! ))) Я ..


Да не за что! ))) Я старательно расставлял смайлики в тексте чтобы не показалось, что я типа это все серьезно... ;)

В зависимости от того какая у вас задача и если это все для HTTP, то я настоятельно рекомендую посмотреть в сторону CWS, где гораздо проще делать простые web странички или сервисы. https (шифрование и сертификат) тогда будет "на совести" IIS сервера от микрософта.

Обращайтесь если что!

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 03.05.20 16:47. Заголовок: Коллеги, подскажите ..


Коллеги, подскажите
Скачал модуль с маркета Samsung IP Demo v 1.3
https://applicationmarket.crestron.com/samsung-ip-demo-v1-3/

Решил добавить в вызов помимо Youtube и Netflix приложение Megogo. Для этого нужно править S#.
Но даже без каких-либо изменений файла, при компиляции выдается ошибка:
"undefined variable 'NAMESPACE'"
Строка имеет вид:
"namespace Crestron.RAD.Drivers.Displays;"
Все родное, а вылазит ошибка.
Куда смотреть?

Спасибо: 0 
ПрофильЦитата Ответить





ссылка на сообщение  Отправлено: 04.05.20 07:24. Заголовок: Что-то я вообще ниче..


Что-то я вообще ничего не понял. Чем вы это компилили и что это за строчка такая? Откуда там точка с запятой в конце или namespace в начале?

Спасибо: 0 
ПрофильЦитата Ответить



ссылка на сообщение  Отправлено: 04.05.20 10:27. Заголовок: Компилил самим симпл..


Компилил самим симпл + (видимо не правильно, впервые столкнулся с этим)
А namespace и точка с запятой стояли там сразу (такой файл с маркета скачан был)

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 6
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет