slil.ru File Uploader

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 11 Jun 2010.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    1) Что это?
    Это программка которая позволяет быстро закачивать файлы на сайт slil.ru. Писал чисто для себя, для удобства.
    2) Как пользоваться?
    Есть 2 варианта:
    1) просто запустить её и она предложит выбрать файл
    2) можно кинуть её в
    2000, XP, 2003 - C:\Documents and Settings\<Имя Пользователя>\SendTo\
    Vista, 7 - C:\Users\<Имя Пользователя>\AppData\Roaming\Microsoft\Windows\SendTo
    И тогда можно выбрать файл, кликнуть по нем правой кнопкой мышки и в пункте Отправить (SendTo) выбрать пунки slil.ru
    3) Какие характеристики?
    1) Можно отправить тока 1 файл за раз
    2) Не поддерживает прокси ( влом добавлять
    3) Отображает прогрессбар, хотя на реале он почти никогда не нужен
    4) компактный дизайн и возможность скопировать ссылку сразу в буфер обмена
    5) макс размер файла - 50 метров (ограничение slil)
    4) Техническая часть
    1) написан на Си (в MS VS 2008)
    2) написан полностью на WinAPI и WinSock
    3) чистый размер - 7680 байт.
    5) А исходники?
    А исходники не дам, потому что там написан отчасти быдлокод не оптимизированный ) писался после пьянки пару часов.
    Но по просьбе трудящихся тож выложил.
    P.S.
    Советую всё же добавить её в SendTo потому что очень удобно юзать получается, когда надо быстро чтото залить.
     

    Attached Files:

    #1 slesh, 11 Jun 2010
    Last edited: 16 Jun 2010
    17 people like this.
  2. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    "Максимальный размер файла должен быть не более 50 мегабайт"
    Что такое "Максимальный размер" моего файла? :)
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Вообще на slil разрешено загружать файлы размером не более 50 мегабайт.
     
  4. desTiny

    desTiny Elder - Старейшина

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    не, я про составляющую русского языка. Понятие "максимальный размер уже выбранного файла" является кривым.
     
  5. Refqs

    Refqs Banned

    Joined:
    20 Feb 2010
    Messages:
    139
    Likes Received:
    56
    Reputations:
    27
    У меня не качается.
     
  6. Nelzone

    Nelzone Banned

    Joined:
    12 Apr 2008
    Messages:
    172
    Likes Received:
    134
    Reputations:
    6
    Berman все пашет
     
  7. nuBo

    nuBo Elder - Старейшина

    Joined:
    29 Dec 2008
    Messages:
    53
    Likes Received:
    84
    Reputations:
    53
    отличная софтина, работает на ура, только на windows 7 (x86) прогрессбар сразу доходит до конца, в общем, это не очень важно :)
     
  8. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    НУ с прогрессбаром везеде проблемки, потому что он показывает сколько файла была считано с винта и отправлено на сервак. Но вот винда сначало кидает данные в буфер в ядре, по этому кажется что файл отправился. такое почти на всех системах есть.
     
  9. qwerra

    qwerra Elder - Старейшина

    Joined:
    21 Apr 2007
    Messages:
    211
    Likes Received:
    68
    Reputations:
    4
    Эх,Слэш,молодец,но подобный софт+ещё возможность отправки ещё на несколько файлопомоек давно уже на Злом в "Мастерской" выложен)
    Вот если бы ты написал удачный загрузчик на ex.ua,вместо ихнего кривого,то да-респект!
     
  10. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    qwerra, я этим займусь)) 947-6восемь5 - пиши)))
     
  11. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    2 slesh вот этот кусочек может стать маленькой неприятностью
    Code:
    char buf[4096];
    data_size = recv(MainSocket, buf, 4096, 0);
    if (data_size > 0)
    {
        buf[data_size] = 0x00;
    }
    а если data_size вернет все 4096 ? 
    
     
  12. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Знаю, я ж и говорю что быдлокод наскоро написанный.
    Если учесть что пакет вообще может быть разбитый и за один раз не считать полностью HTTP заголовок и следовательно не получить ссылку на редирект, то считай проваливается всё. И по этому нужно делать цикл. да и таймауты не повредили бы.
     
  13. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    2 slesh немного покопался :)
    Code:
    typedef char page;
    
    page * alloc_page(unsigned sock)
    {
    	char buff[4096], *tmp;
    	page *p = 0;
    	int rec, all = 0;
    
    	do
    	{
    		rec = recv(sock, buff, sizeof(buff), 0);
    		if (rec == -1)
    		{
    			free(p);
    			return NULL;
    		}
    		if (rec > 0)
    		{
    			all += rec;
    			tmp = realloc(p, all + 1);
    			if (!tmp)
    			{
    				free(p);
    				return NULL;
    			}
    			p = tmp;
    			memmove(p + all - rec, buff, rec);
    			p[all] = '\0';
    		}
    	} while (rec > 0);
    
    	return p;
    }
    
    void free_page(page *p)
    {
    	free(p);
    }
    
    и в этом месте немного изменил )
    Code:
    page *pg;
    wsprintfA(tmp, "\r\n--%s--\r\n", boundary);
    send(MainSocket, tmp, lstrlenA(tmp), 0);
    pg = alloc_page(MainSocket);
    closesocket(MainSocket);
    MainSocket = SOCKET_ERROR;
    if (pg)
    {
            ///
            free_page(pg);
    }
    else
    {
            error = "Ошибка связи";
    }
    
    кстати у меня релиз сбилдился в 6.15 килобайт )
     
  14. Getty

    Getty Banned

    Joined:
    17 Jun 2010
    Messages:
    104
    Likes Received:
    1
    Reputations:
    0
    отличная вещь. спасиб
    только его обновитьнемного непомешало)
     
  15. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ну так тыже наверное юзаешь внешнюю CRT либу. А у меня чиcтый WinAPI
     
  16. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    ну да к системной msvcrt.dll привязываю веса практически не добавляет а удобства окупаются сторицей
     
  17. bons

    bons Elder - Старейшина

    Joined:
    20 Dec 2007
    Messages:
    286
    Likes Received:
    121
    Reputations:
    21
    с неблокирующими сокетами можно проконтролировать отправку данных и венда тут не виновата. Непонятно зачем делать прогрессбар если он заведомо неверную инфу выдает?
    вообще, C не лучший язык для такой программы
    также трудно предположить зачем эта софтина нужна, файл можно залить и браузером.
     
    #17 bons, 19 Jun 2010
    Last edited: 19 Jun 2010
  18. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    интересно послушать минусы С для такой программы
     
  19. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 bons в томто, и дело что браузером заливать не всегда удобно. Очень часто комуто чтото надо передать. Быстро кликнул на файле, выбрал Отправить->slil.ru и получил ссылку.
     
  20. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    Что-то я не пойму,как вы такой вес маленький делаете.
    Вот у меня код:
    Code:
    #include <Windows.h>
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	MessageBox(NULL, L"Мессадж Бокс,Прювет!11", L":(", MB_OK);
    	return 0;
    }
    
    MSVC++ 2010
    Release, и вес все равно 7 кб. Как,что жать,что бы уменьшить размер. УПыИКС не предлагать.