Skip to content

Commit

Permalink
Merge branch 'master' into gtk3-preview
Browse files Browse the repository at this point in the history
masterブランチの更新をgtk3-previewに反映する
* JDimproved#33
* JDimproved#34
* JDimproved#35
* JDimproved#36

Closes #27
  • Loading branch information
ma8ma committed Feb 17, 2019
2 parents 567a9cc + e8cc28c commit 8e829c5
Show file tree
Hide file tree
Showing 4 changed files with 139 additions and 26 deletions.
60 changes: 60 additions & 0 deletions CONTRIBUTING.md
@@ -0,0 +1,60 @@
# JDimへコントリビュートする

はじめに、ガイドを読む時間を取っていただきありがとうございます。:+1:
私達はJDimを開発・保守してくためにパッチを歓迎しています!:revolving_hearts:

JDimへのコントリビュート方法を案内します。

* :beginner: まずはJDimproved/JDimをforkしてリポジトリを用意し、ローカルにcloneしてJDimをビルドしてみましょう。
[README.md][readme-md]
* :mag: [Issues][issues][Pull requests][pull-requests]を確認すると興味関心のあるトピックが見つかるかもしれません。
* :earth_asia: [Linux板@5ちゃんねる][linux-5ch]のJD/JDimスレで質問やバグ報告をすることもできます。
* :heart_decoration: JDimはボランティアによって開発・保守されています。
そのため速やかに返信することが難しい場合がありますが予めご了承ください。


## :question: 質問をしたい
Issueを開いて質問をします。 → [New issue][new-issue]

使い方や設定方法の情報は[オンラインマニュアル (JD)][manual]
2ch/5chのスレッド・過去ログにありますのでそちらも参照してください。


## :beetle: バグを報告したい
Issueを開いてバグを報告します。 → [New issue][new-issue]

以下の情報は原因特定の手がかりになりますのでご報告くださいますようお願いいたします。

* 動作環境(クリップボードへのコピーを利用してください)
* やりたいこと・期待する動作
* バグが現れるまでの手順・操作
* 実際の結果・エラーメッセージ


## :muscle: 機能のリクエストをしたい
Issueを開いて欲しい機能の要望を出しフィードバックを集めます。 → [New issue][new-issue]
可能ならコードを書き始めてください。実証用でもコードがあると具体的なフィードバックが集まりやすいです。


## :mailbox_with_mail: Pull requestを提出する

Pull requestは`master`ブランチに対してお願いいたします。

* 文書やソースコードのタイプミス修正、バグ修正、文書の改善、機能の改善などは直接PRを受け付けています。
* ユーザーインタフェースの変更や互換性に影響が出る修正は最初にissueを開いて意見・要望をお伝えいただければ幸いです。

#### :pencil: C++ソースコードを修正するときの注意

* C++11の機能を使う。迷ったときは[C++ Core Guidelines][isocpp]を参考にする。
* コーディングスタイルは周囲のコードになるべく合わせる。
* ソースコードを修正したときはビルド可能なことチェックする。
* 修正前よりコンパイル時警告を増やさないように気をつける。


[readme-md]: https://github.com/JDimproved/JDim/tree/master/README.md
[issues]: https://github.com/JDimproved/JDim/issues
[pull-requests]: https://github.com/JDimproved/JDim/pulls
[linux-5ch]: https://mao.5ch.net/linux/
[new-issue]: https://github.com/JDimproved/JDim/issues/new
[manual]: https://jd4linux.osdn.jp/manual/289/
[isocpp]: https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines
14 changes: 6 additions & 8 deletions README.md
Expand Up @@ -59,15 +59,13 @@ dnf install gtkmm24-devel gnutls-devel libgcrypt-devel libSM-devel libtool autom
dnf install gtkmm30-devel gnutls-devel libgcrypt-devel libSM-devel libtool automake autoconf-archive git
```

#### Debian系
#### Debian (stretch-backportsあるいはbuster以降)
```sh
sudo apt-get build-dep jd
```

開発環境が入っていない場合は、

```sh
sudo apt-get install build-essential automake autoconf-archive git
sudo apt install libc6-dev make gcc g++ git
sudo vi /etc/apt/sources.list
# ↑エディタは何でも良い。deb-src行でstretch-backportsあるいはbuster以降を有効にする
sudo apt update
sudo apt build-dep jdim
```


Expand Down
89 changes: 72 additions & 17 deletions src/jdlib/ssl.cpp
Expand Up @@ -65,41 +65,73 @@ bool JDSSL::connect( const int soc, const char *host )

int ret;

gnutls_certificate_allocate_credentials( &m_cred );
#if GNUTLS_VERSION_NUMBER >= 0x030020
ret = gnutls_certificate_set_x509_system_trust( m_cred );
assert( ret >= 0 );
#endif

ret = gnutls_init( &m_session, GNUTLS_CLIENT );
if( ret != 0 ){
m_errmsg = "gnutls_init failed";
return false;
}

#if GNUTLS_VERSION_NUMBER >= 0x020104
gnutls_set_default_priority( m_session );
#if GNUTLS_VERSION_NUMBER >= 0x020108
// gnutls >= 2.1.7 (unreleased)
gnutls_priority_set_direct( m_session, "NORMAL:%COMPAT", NULL );
#else // GNUTLS_VERSION_NUMBER >= 0x020108
#else
static const int priority_prot[] = { GNUTLS_SSL3, 0 };
// DEPRECATED (gnutls >= 2.1.4 gnutls =< 2.1.6)
// UNDEPRECATED (gnutls >= 2.1.7)
gnutls_set_default_priority( m_session );
// _GNUTLS_GCC_ATTR_DEPRECATE (gnutls >= 2.12.0)
gnutls_protocol_set_priority( m_session, priority_prot );
#endif // GNUTLS_VERSION_NUMBER >= 0x020108
#endif // GNUTLS_VERSION_NUMBER >= 0x020104

gnutls_transport_set_ptr( m_session, (gnutls_transport_ptr_t)(long) soc );
gnutls_certificate_allocate_credentials( &m_cred );
gnutls_credentials_set( m_session, GNUTLS_CRD_CERTIFICATE, m_cred );
gnutls_server_name_set( m_session, GNUTLS_NAME_DNS, host, strlen( host ) );
#if GNUTLS_VERSION_NUMBER >= 0x030406
gnutls_session_set_verify_cert( m_session, host, 0 );
#endif

#if GNUTLS_VERSION_NUMBER >= 0x030109
gnutls_transport_set_int( m_session, soc );
#else
gnutls_transport_set_ptr( m_session, static_cast< gnutls_transport_ptr_t >( soc ) );
#endif
#if GNUTLS_VERSION_NUMBER >= 0x030100
gnutls_handshake_set_timeout( m_session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT );
#endif

while ( ( ret = gnutls_handshake( m_session ) ) != GNUTLS_E_SUCCESS )
{
if ( gnutls_error_is_fatal( ret ) != 0 )
{
m_errmsg = "gnutls_handshake failed";
return false;
do {
ret = gnutls_handshake( m_session );
} while( ret < 0 && gnutls_error_is_fatal( ret ) == 0 );

if( ret < 0 ) {
#if defined(_DEBUG) && GNUTLS_VERSION_NUMBER >= 0x030406
if( ret == GNUTLS_E_CERTIFICATE_VERIFICATION_ERROR ) {
gnutls_certificate_type_t type = gnutls_certificate_type_get( m_session );
const unsigned status = gnutls_session_get_verify_cert_status( m_session );
gnutls_datum_t out;
gnutls_certificate_verification_status_print( status, type, &out, 0 );
std::cout << "JDSSL::connect(gnutls) - cert verify output: " << out.data << std::endl;
gnutls_free( out.data );
}
#endif
m_errmsg = "JDSSL::connect(gnutls) *** Handshake failed: ";
m_errmsg += gnutls_strerror( ret );
return false;
}

#ifdef _DEBUG
std::cout << "connect ok\n";
#if GNUTLS_VERSION_NUMBER >= 0x030110
char* desc = gnutls_session_get_desc( m_session );
std::cout << "JDSSL::connect(gnutls) - Session info: " << desc << std::endl;
gnutls_free( desc );
#elif
std::cout << "JDSSL::connect(gnutls)" << std::endl;
#endif
#endif // _DEBUG

return true;
}
Expand All @@ -108,7 +140,7 @@ bool JDSSL::connect( const int soc, const char *host )
bool JDSSL::close()
{
#ifdef _DEBUG
std::cout << "JDSSL::close(gnutlsl)\n";
std::cout << "JDSSL::close(gnutls)\n";
#endif

if( m_session ){
Expand All @@ -127,7 +159,15 @@ bool JDSSL::close()

int JDSSL::write( const char* buf, const size_t bufsize )
{
int tmpsize = gnutls_record_send( m_session, buf, bufsize );
int tmpsize;
do {
tmpsize = gnutls_record_send( m_session, buf, bufsize );
} while( tmpsize == GNUTLS_E_AGAIN || tmpsize == GNUTLS_E_INTERRUPTED );

#ifdef _DEBUG
std::cout << "JDSSL::write(gnutls) tmpsize = " << tmpsize << "; bufsize = " << bufsize << std::endl;
#endif

if( tmpsize < 0 ) m_errmsg = "gnutls_record_send failed";

return tmpsize;
Expand All @@ -136,7 +176,22 @@ int JDSSL::write( const char* buf, const size_t bufsize )

int JDSSL::read( char* buf, const size_t bufsize )
{
int tmpsize = gnutls_record_recv( m_session, buf, bufsize );
int tmpsize;
do {
tmpsize = gnutls_record_recv( m_session, buf, bufsize );
} while( tmpsize == GNUTLS_E_AGAIN || tmpsize == GNUTLS_E_INTERRUPTED );

#ifdef _DEBUG
std::cout << "JDSSL::read(gnutls) tmpsize = " << tmpsize << "; bufsize = " << bufsize << std::endl;
#endif

#ifdef GNUTLS_E_PREMATURE_TERMINATION
if( tmpsize == GNUTLS_E_PREMATURE_TERMINATION || tmpsize == GNUTLS_E_INVALID_SESSION ) {
// Transfer-Encoding: chuncked のときはデータの長さが分からない
// そのため受信エラーをデータ無しに置き換えて受信終了を判断する
return 0;
}
#endif
if( tmpsize < 0 ) m_errmsg = "gnutls_record_recv failed";

return tmpsize;
Expand Down
2 changes: 1 addition & 1 deletion src/jdversion.h
Expand Up @@ -20,7 +20,7 @@
#define MAJORVERSION 0
#define MINORVERSION 1
#define MICROVERSION 91
#define JDDATE_FALLBACK "20190207"
#define JDDATE_FALLBACK "20190217"
#define JDTAG "beta"

//---------------------------------
Expand Down

0 comments on commit 8e829c5

Please sign in to comment.