Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MySQL и AS3, эээ..... 
:(
    Опции темы
AntonioBanderaz
Дата 7.2.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Сабж собственно. Собираюсь написать коннектор к мускулу для станд алон приложений на flex, возникли проблемы с сокетами, просто не хочет подключаться к порту мускула, хотя в логах сервера он фигурирует как waiting fo login packet или как-то так код подключения или точнее просто проверки открытия воть:

Код

final function test_cocket():int {
    var BinSock:Socket = new Socket("localhost", 3306);
         var _buff:ByteArray = new ByteArray();
    BinSock.writeByte(0x0b);
    BinSock.readBytes(_buff,0,BinSock.bytesAvailable);
    trace(_buff.toString());
    return 0;
}


Мож я с протоколом не в лады ))) нужна помощь )


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 7.2.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



Events!
что-то вроде такого:
Код

package core
{
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.net.Socket;
    import flash.util.trace;
    
    //-- class for working with socket
    public class mysql_driver
    {
        public var host:String;
        public var port:Number;
        
        private var mysql_socket:Socket;
        
        public function mysql_driver()
        {
            this.host = 'localhost';
            this.port = 3306;
        }
        
        public function connect():void
        {
            this.mysql_socket = new Socket();
            this.mysql_socket.addEventListener(Event.CONNECT,this.onConnect);
            this.mysql_socket.addEventListener(ProgressEvent.SOCKET_DATA,this.onData);
            this.mysql_socket.connect(this.host,this.port);
        }
        
        private function onConnect(event:Event):void
        {
            trace ('connected');
        }
        
        private function onData(event:ProgressEvent):void
        {
                       trace ('data recived');
        }
    }    
}


и т.п.
PM MAIL WWW ICQ YIM MSN   Вверх
AlDev
Дата 8.2.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



ЗЫ:
пригодится. Хэширование пароля для отправки:
Код

    //-- password
    class password
    {
        public function password()
        {
        }
        
        public static function scramble(pass:String, hash_seed:String, client_capabilities:Number):String
        {
            if (password.length == 0)
            {
                return '';
            }
            
            var hsl:Number = hash_seed.length;
            var out:Array = new Array();
            var hash_pass:Array = password.get_hash(pass);
            var hash_mess:Array = password.get_hash(hash_seed);
            var max_value:Number = 0;
            var seed:Number = 0;
            var seed2:Number = 0;
            var dRes:Number = 0;
            var dSeed:Number = 0;
            var dMax:Number = 0;
            if (client_capabilities>1)
            {
                max_value = 0x01FFFFFF;
                seed = password.xor_by_long(hash_pass[0],hash_mess[0])%max_value;
                seed2 = int(seed/2);
            }else
            {
                max_value = 0x3FFFFFFF;
                seed = password.xor_by_long(hash_pass[0], hash_mess[0])%max_value;
                seed2 = password.xor_by_long(hash_pass[1], hash_mess[1])%max_value;
            }
            dMax = max_value;
            var i:Number = 0;
            for (i=0;i<hsl;i++)
            {
                seed = int((seed+3+seed2)%max_value);
                seed2 = int((seed+seed2+33)%max_value);
                dSeed = seed;
                dRes = dSeed/dMax;
                out.push(int(dRes*31)+64);
            }
            if (client_capabilities == 1)
            {
                seed  = (seed*3+seed2)%max_value;
                seed2 = (seed+seed2+33)%max_value;
                dSeed = seed;
                dRes = dSeed/dMax;
                var e:uint = int(dRes*31);
                for (i=0;i<hsl;i++) 
                {
                    out[i] ^= e;
                }
            }
        }
        
        public static function get_hash(pass:String):Array
        {
            var nr:Number = 1345345333;
            var ad:Number = 7;
            var nr2:Number = 0x12345671;
            var tmp:Number;
            var value:Number;
            var c:String;
            var pwd_len:Number = pass.length;
            for (var i:uint = 0;i<pwd_len;i++)
            {
                c = pass.charAt(i);
                if ((c==' ')||(c='\t'))
                {
                    continue;
                }
                tmp = c.charCodeAt(0);
                value = ((password.and_by_char(nr, 63) + ad) * tmp) + nr*256;
                nr = password.xor_by_long(nr, value);
                nr2 += password.xor_by_long((nr2*256),nr);
                ad += tmp;
            }
            return new Array(password.and_by_long(nr, 0x7fffffff),password.and_by_long($nr2, 0x7fffffff));
        }
        
        public static function and_by_char(source:Number, mask:Number):Number
        {
            return source & mask;
        }
        
        public static function and_by_long(source:Number, mask:Number):Number
        {
            mask = mask || 0xFFFFFFFF;
            return (password.curr_off_to_long(source) & password.curr_off_to_long(mask));
        }
        
        public static function xor_by_long(source:Number, mask:Number):Number
        {
            mask = mask || 0;
            return (password.curr_off_to_long(source) ^ password.curr_off_to_long(mask));
        }
        
        protected static function curr_off_to_long(source:Number):Number
        {
            if (source >= 5.006)
            {                
                if (source > 0xFFFFFFFF)
                {
                    source = source % (0xFFFFFFFF + 1);
                }
                return source;
            }
            while (source > 0xFFFFFFFF)
            {
                source -= FFFFFFFF + 1;
            }
            return source;
        }        
    }

PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 8.2.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Как я понял процедура залогинивания происходит так...


1. Я подключаю сокет
1а. Получаю номар пакета и версию мускула
2. Посылаю номер команды на авторизацию
3. Принимаю положительный ответ (0)
4. Отсылаю логин в виде строки и хеш пароля.
сишный вид строки заканчивается 00
5. Принимаю ответ

Собственно вопрос как мне пакет формировать, через bytesArray и его методы wrightByte, wrightUTF так? если не прав подскажите....


ГЫ:
AlDev Спасибо как раз над этим парился... Если у тебя есть дока по протоколу отличная от официальной пришли пож ))


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 8.2.2006, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



http://dev.mysql.com/doc/internals/en/index.html

реализация на perl:
http://search.cpan.org/src/OYAMA/Net-MySQL-0.08/MySQL.pm

Цитата(AntonioBanderaz @ 8.2.2006, 22:38 Найти цитируемый пост)

через bytesArray и его методы wrightByte, wrightUTF так?

да. И подобные методы.
ЗЫ:
writeByte ;)
PM MAIL WWW ICQ YIM MSN   Вверх
AntonioBanderaz
Дата 8.2.2006, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



ГЫ: ЗЫ:
я заработался...


А за перловскую реализацию спа, то что нужно!


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AntonioBanderaz
Дата 9.2.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 18



Цитата(AlDev @ 8.2.2006, 11:20 Найти цитируемый пост)

ЗЫ:пригодится. Хэширование пароля для отправки:

у тя там ошибки причём куча.... вот испраленный и немного доработаный вариант...
Код

package MySQL.Password {

import flash.util.trace;

public class Password    
    {    
        public function Password()    { }    
        
        public static function map(val:Array):String {
         trace("\nМетод map(val:Array)");
         trace("Вход\n (val): " + val + "\n");
         var ret:String = "";
         for(var i:Number = 0; i < val.length; i++ )
           ret += val[i].toString();
         trace("Выход\n (string): " + ret + "\n");
         return ret;
        }
         
        public function scramble(password:String, hash_seed:String, client_capabilities:Number):String    
        {    
            if (password.length == 0)    
            {    
                return '';    
            }    
            var hsl:Number = hash_seed.length;    
            var out:Array = new Array();    
            var hash_pass:Array = Password.get_hash(password);    
            var hash_mess:Array = Password.get_hash(hash_seed);    
            var max_value:Number = 0;    
            var seed:Number = 0;    
            var seed2:Number = 0;    
            var dRes:Number = 0;    
            var dSeed:Number = 0;    
            var dMax:Number = 0;    
            if (client_capabilities>1)    
            {    
                max_value = 0x01FFFFFF;    
                seed = Password.xor_by_long(hash_pass[0],hash_mess[0])%max_value;
                seed2 = int(seed/2);    
            }else    
            {    
                max_value = 0x3FFFFFFF;    
                seed = Password.xor_by_long(hash_pass[0], hash_mess[0])%max_value;    
                seed2 = Password.xor_by_long(hash_pass[1], hash_mess[1])%max_value;    
            }    
            dMax = max_value;    
            var i:Number = 0;    
            for (i=0;i<hsl;i++)    
            {    
                seed = int((seed+3+seed2)%max_value);    
                seed2 = int((seed+seed2+33)%max_value);    
                dSeed = seed;    
                dRes = dSeed/dMax;    
                out.push(int(dRes*31)+64);    
            }    
            if (client_capabilities == 1)    
            {    
                seed  = (seed*3+seed2)%max_value;    
                seed2 = (seed+seed2+33)%max_value;    
                dSeed = seed;    
                dRes = dSeed/dMax;    
                var e:uint = int(dRes*31);    
                for (i=0;i<hsl;i++)    
                {    
                    out[i] ^= e;    
                }    
            }    
            return Password.map(out);
        }    
         
        public static function get_hash(pass:String):Array    
        {    
         trace("\nМетод get_hash(pass:String)");
         trace("Вход\n (pass): " + pass + "\n");
            var nr:Number = 1345345333;    
            var ad:Number = 7;    
            var nr2:Number = 0x12345671;    
            var tmp:Number;    
            var value:Number;    
            var c:String;    
            var pwd_len:Number = pass.length;    
            for (var i:uint = 0;i<pwd_len;i++)    
            {    
                c = pass.charAt(i);    
                if ((c == ' ')||(c == '\t'))    
                {    
                    continue;    
                }    
                tmp = c.charCodeAt(0);    
                value = ((Password.and_by_char(nr, 63) + ad) * tmp) + nr*256;    
                nr = Password.xor_by_long(nr, value);    
                nr2 += Password.xor_by_long((nr2*256),nr);    
                ad += tmp;    
            }    
            return new Array(Password.and_by_long(nr, 0x7fffffff),Password.and_by_long(nr2, 0x7fffffff));    
        }    
         
        public static function and_by_char(source:Number, mask:Number):Number    
        {    
         trace("\nМетод and_by_char(source:Number, mask:Number)");
         trace("Вход \n (mask): " + mask + " (source): " + source + "\n");
            return source & mask;
        }    
         
        public static function and_by_long(source:Number, mask:Number):Number    
        {    
         trace("\nМетод and_by_long(source:Number, mask:Number)");
         trace("Вход \n (mask): " + mask + " (source): " + source + "\n");
            mask = mask || 0xFFFFFFFF;
            //trace("Взял (mask) " + mask + "\n");
            return (Password.curr_off_to_long(source) & Password.curr_off_to_long(mask));    
        }    
         
        public static function xor_by_long(source:Number, mask:Number):Number    
        {    
         trace("\nМетод xor_by_long(source:Number, mask:Number)");
         trace("Вход \n (mask): " + mask + " (source): " + source + "\n");
            mask = mask || 0;
            //trace("Взял (mask) " + mask + "\n");    
            return (Password.curr_off_to_long(source) ^ Password.curr_off_to_long(mask));    
        }    
         
        protected static function curr_off_to_long(source:Number):Number
        {    
         trace("\nМетод curr_off_to_long(source:Number)");
         trace("Вход\n (source): " + source + "\n");
            if (source >= 5.006)    
            {                 
                if (source > 0xFFFFFFFF)    
                {    
                    source = source % (0xFFFFFFFF + 1);    
                }    
                return source;    
            }    
            while (source > 0xFFFFFFFF)    
            {    
                source -= 0xFFFFFFFF + 1;    
            }    
            return source;    
        }         
    }
}


Это сообщение отредактировал(а) AntonioBanderaz - 9.2.2006, 16:48


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AlDev
Дата 10.2.2006, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный идиотъ
***


Профиль
Группа: Участник Клуба
Сообщений: 1927
Регистрация: 17.4.2005
Где: Irk, rus

Репутация: 10
Всего: 50



видимо не ту версию скинул, пардон smile
PM MAIL WWW ICQ YIM MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.